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    <filename>*.ps1</filename>
 10    <filename>*.psm1</filename>
 11    <filename>*.psd1</filename>
 12    <mime_type>text/x-powershell</mime_type>
 13    <case_insensitive>true</case_insensitive>
 14    <dot_all>true</dot_all>
 15  </config>
 16  <rules>
 17    <state name="root">
 18      <rule pattern="\(">
 19        <token type="Punctuation"/>
 20        <push state="child"/>
 21      </rule>
 22      <rule pattern="\s+">
 23        <token type="Text"/>
 24      </rule>
 25      <rule pattern="^(\s*#[#\s]*)(\.(?:component|description|example|externalhelp|forwardhelpcategory|forwardhelptargetname|functionality|inputs|link|notes|outputs|parameter|remotehelprunspace|role|synopsis))([^\n]*$)">
 26        <bygroups>
 27          <token type="Comment"/>
 28          <token type="LiteralStringDoc"/>
 29          <token type="Comment"/>
 30        </bygroups>
 31      </rule>
 32      <rule pattern="#[^\n]*?$">
 33        <token type="Comment"/>
 34      </rule>
 35      <rule pattern="(&amp;lt;|&lt;)#">
 36        <token type="CommentMultiline"/>
 37        <push state="multline"/>
 38      </rule>
 39      <rule pattern="(?i)([A-Z]:)">
 40        <token type="Name"/>
 41      </rule>
 42      <rule pattern="@&#34;\n">
 43        <token type="LiteralStringHeredoc"/>
 44        <push state="heredoc-double"/>
 45      </rule>
 46      <rule pattern="@&#39;\n.*?\n&#39;@">
 47        <token type="LiteralStringHeredoc"/>
 48      </rule>
 49      <rule pattern="`[\&#39;&#34;$@-]">
 50        <token type="Punctuation"/>
 51      </rule>
 52      <rule pattern="&#34;">
 53        <token type="LiteralStringDouble"/>
 54        <push state="string"/>
 55      </rule>
 56      <rule pattern="&#39;([^&#39;]|&#39;&#39;)*&#39;">
 57        <token type="LiteralStringSingle"/>
 58      </rule>
 59      <rule pattern="(\$|@@|@)((global|script|private|env):)?\w+">
 60        <token type="NameVariable"/>
 61      </rule>
 62      <rule pattern="[a-z]\w*-[a-z]\w*\b">
 63        <token type="NameBuiltin"/>
 64      </rule>
 65      <rule pattern="(while|validateset|validaterange|validatepattern|validatelength|validatecount|until|trap|switch|return|ref|process|param|parameter|in|if|global:|function|foreach|for|finally|filter|end|elseif|else|dynamicparam|do|default|continue|cmdletbinding|break|begin|alias|\?|%|#script|#private|#local|#global|mandatory|parametersetname|position|valuefrompipeline|valuefrompipelinebypropertyname|valuefromremainingarguments|helpmessage|try|catch|throw)\b">
 66        <token type="Keyword"/>
 67      </rule>
 68      <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">
 69        <token type="Operator"/>
 70      </rule>
 71      <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">
 72        <token type="NameBuiltin"/>
 73      </rule>
 74      <rule pattern="\[[a-z_\[][\w. `,\[\]]*\]">
 75        <token type="NameConstant"/>
 76      </rule>
 77      <rule pattern="-[a-z_]\w*">
 78        <token type="Name"/>
 79      </rule>
 80      <rule pattern="\w+">
 81        <token type="Name"/>
 82      </rule>
 83      <rule pattern="[.,;@{}\[\]$()=+*/\\&amp;%!~?^`|&lt;&gt;-]|::">
 84        <token type="Punctuation"/>
 85      </rule>
 86    </state>
 87    <state name="child">
 88      <rule pattern="\)">
 89        <token type="Punctuation"/>
 90        <pop depth="1"/>
 91      </rule>
 92      <rule>
 93        <include state="root"/>
 94      </rule>
 95    </state>
 96    <state name="multline">
 97      <rule pattern="[^#&amp;.]+">
 98        <token type="CommentMultiline"/>
 99      </rule>
100      <rule pattern="#(&gt;|&amp;gt;)">
101        <token type="CommentMultiline"/>
102        <pop depth="1"/>
103      </rule>
104      <rule pattern="\.(component|description|example|externalhelp|forwardhelpcategory|forwardhelptargetname|functionality|inputs|link|notes|outputs|parameter|remotehelprunspace|role|synopsis)">
105        <token type="LiteralStringDoc"/>
106      </rule>
107      <rule pattern="[#&amp;.]">
108        <token type="CommentMultiline"/>
109      </rule>
110    </state>
111    <state name="string">
112      <rule pattern="`[0abfnrtv&#39;\&#34;$`]">
113        <token type="LiteralStringEscape"/>
114      </rule>
115      <rule pattern="[^$`&#34;]+">
116        <token type="LiteralStringDouble"/>
117      </rule>
118      <rule pattern="\$\(">
119        <token type="Punctuation"/>
120        <push state="child"/>
121      </rule>
122      <rule pattern="&#34;&#34;">
123        <token type="LiteralStringDouble"/>
124      </rule>
125      <rule pattern="[`$]">
126        <token type="LiteralStringDouble"/>
127      </rule>
128      <rule pattern="&#34;">
129        <token type="LiteralStringDouble"/>
130        <pop depth="1"/>
131      </rule>
132    </state>
133    <state name="heredoc-double">
134      <rule pattern="\n&#34;@">
135        <token type="LiteralStringHeredoc"/>
136        <pop depth="1"/>
137      </rule>
138      <rule pattern="\$\(">
139        <token type="Punctuation"/>
140        <push state="child"/>
141      </rule>
142      <rule pattern="[^@\n]+&#34;]">
143        <token type="LiteralStringHeredoc"/>
144      </rule>
145      <rule pattern=".">
146        <token type="LiteralStringHeredoc"/>
147      </rule>
148    </state>
149  </rules>
150</lexer>