{
    "scopeName": "source.uxml.unity",
    "name": "UnityUXML",
    "patterns": [
        {
            "begin": "(<\\?)\\s*([-_a-zA-Z0-9]+)",
            "captures": {
                "1": {
                    "name": "punctuation.definition.tag.uxml"
                },
                "2": {
                    "name": "entity.name.tag.uxml"
                }
            },
            "end": "(\\?>)",
            "name": "meta.tag.preprocessor.uxml",
            "patterns": [
                {
                    "match": " ([a-zA-Z-]+)",
                    "name": "entity.other.attribute-name.uxml"
                },
                {
                    "include": "#doublequotedString"
                },
                {
                    "include": "#singlequotedString"
                }
            ]
        },
        {
            "begin": "(<!)(DOCTYPE)\\s+([:a-zA-Z_][:a-zA-Z0-9_.-]*)",
            "captures": {
                "1": {
                    "name": "punctuation.definition.tag.uxml"
                },
                "2": {
                    "name": "keyword.other.doctype.uxml"
                },
                "3": {
                    "name": "variable.language.documentroot.uxml"
                }
            },
            "end": "\\s*(>)",
            "name": "meta.tag.sgml.doctype.uxml",
            "patterns": [
                {
                    "include": "#internalSubset"
                }
            ]
        },
        {
            "include": "#comments"
        },
        {
            "begin": "(<)((?:([-_a-zA-Z0-9]+)(:))?([-_a-zA-Z0-9:]+))(?=(\\s[^>]*)?></\\2>)",
            "beginCaptures": {
                "1": {
                    "name": "punctuation.definition.tag.uxml"
                },
                "2": {
                    "name": "entity.name.tag.uxml"
                },
                "3": {
                    "name": "entity.name.tag.namespace.uxml"
                },
                "4": {
                    "name": "punctuation.separator.namespace.uxml"
                },
                "5": {
                    "name": "entity.name.tag.localname.uxml"
                }
            },
            "end": "(>)(</)((?:([-_a-zA-Z0-9]+)(:))?([-_a-zA-Z0-9:]+))(>)",
            "endCaptures": {
                "1": {
                    "name": "punctuation.definition.tag.uxml"
                },
                "2": {
                    "name": "punctuation.definition.tag.uxml"
                },
                "3": {
                    "name": "entity.name.tag.uxml"
                },
                "4": {
                    "name": "entity.name.tag.namespace.uxml"
                },
                "5": {
                    "name": "punctuation.separator.namespace.uxml"
                },
                "6": {
                    "name": "entity.name.tag.localname.uxml"
                },
                "7": {
                    "name": "punctuation.definition.tag.uxml"
                }
            },
            "name": "meta.tag.no-content.uxml",
            "patterns": [
                {
                    "include": "#tagStuff"
                }
            ]
        },
        {
            "begin": "(</?)(?:([-\\w\\.]+)((:)))?([-\\w\\.:]+)",
            "captures": {
                "1": {
                    "name": "punctuation.definition.tag.uxml"
                },
                "2": {
                    "name": "entity.name.tag.namespace.uxml"
                },
                "3": {
                    "name": "entity.name.tag.uxml"
                },
                "4": {
                    "name": "punctuation.separator.namespace.uxml"
                },
                "5": {
                    "name": "entity.name.tag.localname.uxml"
                }
            },
            "end": "(/?>)",
            "name": "meta.tag.uxml",
            "patterns": [
                {
                    "include": "#tagStuff"
                }
            ]
        },
        {
            "include": "#entity"
        },
        {
            "include": "#bare-ampersand"
        },
        {
            "begin": "<%@",
            "beginCaptures": {
                "0": {
                    "name": "punctuation.section.embedded.begin.uxml"
                }
            },
            "end": "%>",
            "endCaptures": {
                "0": {
                    "name": "punctuation.section.embedded.end.uxml"
                }
            },
            "name": "source.java-props.embedded.uxml",
            "patterns": [
                {
                    "match": "page|include|taglib",
                    "name": "keyword.other.page-props.uxml"
                }
            ]
        },
        {
            "begin": "<%[!=]?(?!--)",
            "beginCaptures": {
                "0": {
                    "name": "punctuation.section.embedded.begin.uxml"
                }
            },
            "end": "(?!--)%>",
            "endCaptures": {
                "0": {
                    "name": "punctuation.section.embedded.end.uxml"
                }
            },
            "name": "source.java.embedded.uxml",
            "patterns": [
                {
                    "include": "source.java"
                }
            ]
        },
        {
            "begin": "<!\\[CDATA\\[",
            "beginCaptures": {
                "0": {
                    "name": "punctuation.definition.string.begin.uxml"
                }
            },
            "end": "]]>",
            "endCaptures": {
                "0": {
                    "name": "punctuation.definition.string.end.uxml"
                }
            },
            "name": "string.unquoted.cdata.uxml"
        }
    ],
    "repository": {
        "EntityDecl": {
            "begin": "(<!)(ENTITY)\\s+(%\\s+)?([:a-zA-Z_][:a-zA-Z0-9_.-]*)(\\s+(?:SYSTEM|PUBLIC)\\s+)?",
            "captures": {
                "1": {
                    "name": "punctuation.definition.tag.uxml"
                },
                "2": {
                    "name": "keyword.other.entity.uxml"
                },
                "3": {
                    "name": "punctuation.definition.entity.uxml"
                },
                "4": {
                    "name": "variable.language.entity.uxml"
                },
                "5": {
                    "name": "keyword.other.entitytype.uxml"
                }
            },
            "end": "(>)",
            "patterns": [
                {
                    "include": "#doublequotedString"
                },
                {
                    "include": "#singlequotedString"
                }
            ]
        },
        "bare-ampersand": {
            "match": "&",
            "name": "invalid.illegal.bad-ampersand.uxml"
        },
        "doublequotedString": {
            "begin": "\"",
            "beginCaptures": {
                "0": {
                    "name": "punctuation.definition.string.begin.uxml"
                }
            },
            "end": "\"",
            "endCaptures": {
                "0": {
                    "name": "punctuation.definition.string.end.uxml"
                }
            },
            "name": "string.quoted.double.uxml",
            "patterns": [
                {
                    "include": "#entity"
                },
                {
                    "include": "#bare-ampersand"
                }
            ]
        },
        "entity": {
            "captures": {
                "1": {
                    "name": "punctuation.definition.constant.uxml"
                },
                "3": {
                    "name": "punctuation.definition.constant.uxml"
                }
            },
            "match": "(&)([:a-zA-Z_][:a-zA-Z0-9_.-]*|#[0-9]+|#x[0-9a-fA-F]+)(;)",
            "name": "constant.character.entity.uxml"
        },
        "internalSubset": {
            "begin": "(\\[)",
            "captures": {
                "1": {
                    "name": "punctuation.definition.constant.uxml"
                }
            },
            "end": "(\\])",
            "name": "meta.internalsubset.uxml",
            "patterns": [
                {
                    "include": "#EntityDecl"
                },
                {
                    "include": "#parameterEntity"
                },
                {
                    "include": "#comments"
                }
            ]
        },
        "parameterEntity": {
            "captures": {
                "1": {
                    "name": "punctuation.definition.constant.uxml"
                },
                "3": {
                    "name": "punctuation.definition.constant.uxml"
                }
            },
            "match": "(%)([:a-zA-Z_][:a-zA-Z0-9_.-]*)(;)",
            "name": "constant.character.parameter-entity.uxml"
        },
        "singlequotedString": {
            "begin": "'",
            "beginCaptures": {
                "0": {
                    "name": "punctuation.definition.string.begin.uxml"
                }
            },
            "end": "'",
            "endCaptures": {
                "0": {
                    "name": "punctuation.definition.string.end.uxml"
                }
            },
            "name": "string.quoted.single.uxml",
            "patterns": [
                {
                    "include": "#entity"
                },
                {
                    "include": "#bare-ampersand"
                }
            ]
        },
        "tagStuff": {
            "patterns": [
                {
                    "captures": {
                        "1": {
                            "name": "entity.other.attribute-name.namespace.uxml"
                        },
                        "2": {
                            "name": "entity.other.attribute-name.uxml"
                        },
                        "3": {
                            "name": "punctuation.separator.namespace.uxml"
                        },
                        "4": {
                            "name": "entity.other.attribute-name.localname.uxml"
                        }
                    },
                    "match": "(?:^|\\s+)(?:([-\\w.]+)((:)))?([-\\w.:]+)="
                },
                {
                    "include": "#doublequotedString"
                },
                {
                    "include": "#singlequotedString"
                }
            ]
        },
        "comments": {
            "begin": "<[!%]--",
            "captures": {
                "0": {
                    "name": "punctuation.definition.comment.uxml"
                }
            },
            "end": "--%?>",
            "name": "comment.block.uxml"
        }
    }
}