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="(&amp;lt;|&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="@&#34;\n">
    
  53.         <token type="LiteralStringHeredoc"/>
    
  54.         <push state="heredoc-double"/>
    
  55.       </rule>
    
  56.       <rule pattern="@&#39;\n.*?\n&#39;@">
    
  57.         <token type="LiteralStringHeredoc"/>
    
  58.       </rule>
    
  59.       <rule pattern="@(?=\(|{)|\$(?=\()">
    
  60.         <token type="NameVariableMagic"/>
    
  61.       </rule>
    
  62.       <rule pattern="`[\&#39;&#34;$@-]">
    
  63.         <token type="Punctuation"/>
    
  64.       </rule>
    
  65.       <rule pattern="&#34;">
    
  66.         <token type="LiteralStringDouble"/>
    
  67.         <push state="string"/>
    
  68.       </rule>
    
  69.       <rule pattern="&#39;([^&#39;]|&#39;&#39;)*&#39;">
    
  70.         <token type="LiteralStringSingle"/>
    
  71.       </rule>
    
  72.       <rule pattern="(?&lt;!\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="(?&lt;!\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="(?&lt;!\[)(?&lt;=\S[^\*|\n]\.)\w+(?=\s+|\(|\{|\.)">
    
  124.         <token type="NameProperty"/>
    
  125.       </rule>
    
  126.       <rule pattern="(?&lt;!\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="[.,;@{}\[\]$()=+*/\\&amp;%!~?^\x60|&lt;&gt;-]|::">
    
  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="[^#&amp;.]+">
    
  168.         <token type="CommentMultiline"/>
    
  169.       </rule>
    
  170.       <rule pattern="#(&gt;|&amp;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="[#&amp;.]">
    
  182.         <token type="CommentMultiline"/>
    
  183.       </rule>
    
  184.     </state>
    
  185.     <state name="string">
    
  186.       <rule pattern="`[0abfnrtv&#39;\&#34;$`]">
    
  187.         <token type="LiteralStringEscape"/>
    
  188.       </rule>
    
  189.       <rule pattern="[^$`&#34;]+">
    
  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="&#34;&#34;">
    
  200.         <token type="LiteralStringDouble"/>
    
  201.       </rule>
    
  202.       <rule pattern="[`$]">
    
  203.         <token type="LiteralStringDouble"/>
    
  204.       </rule>
    
  205.       <rule pattern="&#34;">
    
  206.         <token type="LiteralStringDouble"/>
    
  207.         <pop depth="1"/>
    
  208.       </rule>
    
  209.     </state>
    
  210.     <state name="heredoc-double">
    
  211.       <rule pattern="\n&#34;@">
    
  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]+&#34;]">
    
  223.         <token type="LiteralStringHeredoc"/>
    
  224.       </rule>
    
  225.       <rule pattern=".">
    
  226.         <token type="LiteralStringHeredoc"/>
    
  227.       </rule>
    
  228.     </state>
    
  229.   </rules>
    
  230. </lexer>