{
    "aliases": [
        "ps",
        "ps1"
    ],
    "lexemes": "-?[A-z\\.\\-]+",
    "case_insensitive": true,
    "keywords": {
        "keyword": "if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter"
    },
    "contains": [
        {
            "className": "function",
            "begin": "\\[.*\\]\\s*[\\w]+[ ]??\\(",
            "end": "$",
            "returnBegin": true,
            "relevance": 0,
            "contains": [
                {
                    "begin": "\\[",
                    "end": "\\]",
                    "excludeBegin": true,
                    "excludeEnd": true,
                    "relevance": 0,
                    "contains": [
                        "self",
                        {
                            "$ref": "#contains.0"
                        },
                        {
                            "className": "comment",
                            "begin": null,
                            "end": null,
                            "contains": [
                                {
                                    "className": "doctag",
                                    "variants": [
                                        {
                                            "begin": "\\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)"
                                        },
                                        {
                                            "begin": "\\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\\s+\\S+"
                                        }
                                    ]
                                }
                            ],
                            "variants": [
                                {
                                    "begin": "#",
                                    "end": "$"
                                },
                                {
                                    "begin": "<#",
                                    "end": "#>"
                                }
                            ]
                        },
                        {
                            "begin": "`[\\s\\S]",
                            "relevance": 0
                        },
                        {
                            "className": "number",
                            "begin": "\\b\\d+(\\.\\d+)?",
                            "relevance": 0
                        },
                        {
                            "className": "string",
                            "variants": [
                                {
                                    "begin": "\"",
                                    "end": "\""
                                },
                                {
                                    "begin": "@\"",
                                    "end": "^\"@"
                                }
                            ],
                            "contains": [
                                {
                                    "$ref": "#contains.0.contains.0.contains.3"
                                },
                                {
                                    "className": "variable",
                                    "variants": [
                                        {
                                            "begin": "\\$\\B"
                                        },
                                        {
                                            "className": "keyword",
                                            "begin": "\\$this"
                                        },
                                        {
                                            "begin": "\\$[\\w\\d][\\w\\d_:]*"
                                        }
                                    ]
                                },
                                {
                                    "className": "variable",
                                    "begin": "\\$[A-z]",
                                    "end": "[^A-z]"
                                }
                            ]
                        },
                        {
                            "className": "string",
                            "variants": [
                                {
                                    "begin": "'",
                                    "end": "'"
                                },
                                {
                                    "begin": "@'",
                                    "end": "^'@"
                                }
                            ]
                        },
                        {
                            "className": "built_in",
                            "variants": [
                                {
                                    "begin": "(Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|New|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Complete|Confirm|Deny|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where)+(-)[\\w\\d]+"
                                }
                            ]
                        },
                        {
                            "$ref": "#contains.0.contains.0.contains.5.contains.1"
                        },
                        {
                            "className": "literal",
                            "begin": "\\$(null|true|false)\\b"
                        },
                        {
                            "className": "selector-tag",
                            "begin": "\\@\\B",
                            "relevance": 0
                        },
                        {
                            "begin": "(string|char|byte|int|long|bool|decimal|single|double|DateTime|xml|array|hashtable|void)",
                            "className": "built_in",
                            "relevance": 0
                        },
                        {
                            "className": "type",
                            "begin": "[\\.\\w\\d]+",
                            "relevance": 0
                        }
                    ]
                },
                {
                    "className": "keyword",
                    "begin": "(if|else|foreach|return|do|while|until|elseif|begin|for|trap|data|dynamicparam|end|break|throw|param|continue|finally|in|switch|exit|filter|try|process|catch|hidden|static|parameter)\\b",
                    "endsParent": true,
                    "relevance": 0
                },
                {
                    "className": "title",
                    "begin": "[a-zA-Z]\\w*",
                    "relevance": 0,
                    "endsParent": true
                }
            ]
        },
        {
            "$ref": "#contains.0.contains.0.contains.2"
        },
        {
            "$ref": "#contains.0.contains.0.contains.3"
        },
        {
            "$ref": "#contains.0.contains.0.contains.4"
        },
        {
            "$ref": "#contains.0.contains.0.contains.5"
        },
        {
            "$ref": "#contains.0.contains.0.contains.6"
        },
        {
            "$ref": "#contains.0.contains.0.contains.7"
        },
        {
            "$ref": "#contains.0.contains.0.contains.5.contains.1"
        },
        {
            "$ref": "#contains.0.contains.0.contains.9"
        },
        {
            "$ref": "#contains.0.contains.0.contains.10"
        },
        {
            "className": "class",
            "beginKeywords": "class enum",
            "end": "\\s*[{]",
            "excludeEnd": true,
            "relevance": 0,
            "contains": [
                {
                    "className": "title",
                    "begin": "[a-zA-Z]\\w*",
                    "relevance": 0
                }
            ]
        },
        {
            "className": "function",
            "begin": "function\\s+",
            "end": "\\s*\\{|$",
            "excludeEnd": true,
            "returnBegin": true,
            "relevance": 0,
            "contains": [
                {
                    "begin": "function",
                    "relevance": 0,
                    "className": "keyword"
                },
                {
                    "className": "title",
                    "begin": "\\w[\\w\\d]*((-)[\\w\\d]+)*",
                    "relevance": 0
                },
                {
                    "begin": "\\(",
                    "end": "\\)",
                    "className": "params",
                    "relevance": 0,
                    "contains": [
                        {
                            "$ref": "#contains.0.contains.0.contains.5.contains.1"
                        }
                    ]
                }
            ]
        },
        {
            "begin": "using\\s",
            "end": "$",
            "returnBegin": true,
            "contains": [
                {
                    "$ref": "#contains.0.contains.0.contains.5"
                },
                {
                    "$ref": "#contains.0.contains.0.contains.6"
                },
                {
                    "className": "keyword",
                    "begin": "(using|assembly|command|module|namespace|type)"
                }
            ]
        },
        {
            "variants": [
                {
                    "className": "operator",
                    "begin": "(-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor)\\b"
                },
                {
                    "className": "literal",
                    "begin": "(-)[\\w\\d]+",
                    "relevance": 0
                }
            ]
        },
        {
            "$ref": "#contains.0.contains.0"
        }
    ]
}
