{
    "aliases": [
        "kt"
    ],
    "keywords": {
        "keyword": "abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",
        "built_in": "Byte Short Char Int Long Boolean Float Double Void Unit Nothing",
        "literal": "true false null"
    },
    "contains": [
        {
            "className": "comment",
            "begin": "\/\\*\\*",
            "end": "\\*\/",
            "contains": [
                {
                    "className": "doctag",
                    "begin": "@[A-Za-z]+"
                },
                {
                    "begin": "\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b"
                },
                {
                    "className": "doctag",
                    "begin": "(?:TODO|FIXME|NOTE|BUG|XXX):",
                    "relevance": 0
                }
            ],
            "relevance": 0
        },
        {
            "className": "comment",
            "begin": "\/\/",
            "end": "$",
            "contains": [
                {
                    "$ref": "#contains.0.contains.1"
                },
                {
                    "className": "doctag",
                    "begin": "(?:TODO|FIXME|NOTE|BUG|XXX):",
                    "relevance": 0
                }
            ]
        },
        {
            "className": "comment",
            "begin": "\/\\*",
            "end": "\\*\/",
            "contains": [
                {
                    "className": "comment",
                    "begin": "\/\\*",
                    "end": "\\*\/",
                    "contains": [
                        {
                            "$ref": "#contains.0.contains.1"
                        },
                        {
                            "className": "doctag",
                            "begin": "(?:TODO|FIXME|NOTE|BUG|XXX):",
                            "relevance": 0
                        }
                    ]
                },
                {
                    "$ref": "#contains.0.contains.1"
                },
                {
                    "className": "doctag",
                    "begin": "(?:TODO|FIXME|NOTE|BUG|XXX):",
                    "relevance": 0
                }
            ]
        },
        {
            "className": "keyword",
            "begin": "\\b(break|continue|return|this)\\b",
            "starts": {
                "contains": [
                    {
                        "className": "symbol",
                        "begin": "@\\w+"
                    }
                ]
            }
        },
        {
            "className": "symbol",
            "begin": "[a-zA-Z_]\\w*@"
        },
        {
            "className": "meta",
            "begin": "@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*[a-zA-Z_]\\w*)?"
        },
        {
            "className": "meta",
            "begin": "@[a-zA-Z_]\\w*",
            "contains": [
                {
                    "begin": "\\(",
                    "end": "\\)",
                    "contains": [
                        {
                            "className": "meta-string",
                            "variants": [
                                {
                                    "begin": "\"\"\"",
                                    "end": "\"\"\"(?=[^\"])",
                                    "contains": [
                                        {
                                            "className": "variable",
                                            "begin": "\\$[a-zA-Z_]\\w*"
                                        },
                                        {
                                            "className": "subst",
                                            "begin": "\\${",
                                            "end": "}",
                                            "contains": [
                                                {
                                                    "className": "number",
                                                    "begin": "(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",
                                                    "relevance": 0
                                                },
                                                {
                                                    "className": "string",
                                                    "variants": {
                                                        "$ref": "#contains.6.contains.0.contains.0.variants"
                                                    }
                                                }
                                            ]
                                        }
                                    ]
                                },
                                {
                                    "begin": "'",
                                    "end": "'",
                                    "illegal": "\\n",
                                    "contains": [
                                        {
                                            "begin": "\\\\[\\s\\S]",
                                            "relevance": 0
                                        }
                                    ]
                                },
                                {
                                    "begin": "\"",
                                    "end": "\"",
                                    "illegal": "\\n",
                                    "contains": [
                                        {
                                            "$ref": "#contains.6.contains.0.contains.0.variants.1.contains.0"
                                        },
                                        {
                                            "$ref": "#contains.6.contains.0.contains.0.variants.0.contains.0"
                                        },
                                        {
                                            "$ref": "#contains.6.contains.0.contains.0.variants.0.contains.1"
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "className": "function",
            "beginKeywords": "fun",
            "end": "[(]|$",
            "returnBegin": true,
            "excludeEnd": true,
            "keywords": {
                "$ref": "#keywords"
            },
            "illegal": "fun\\s+(<.*>)?[^\\s\\(]+(\\s+[^\\s\\(]+)\\s*=",
            "relevance": 5,
            "contains": [
                {
                    "begin": "[a-zA-Z_]\\w*\\s*\\(",
                    "returnBegin": true,
                    "relevance": 0,
                    "contains": [
                        {
                            "className": "title",
                            "begin": "[a-zA-Z_]\\w*",
                            "relevance": 0
                        }
                    ]
                },
                {
                    "className": "type",
                    "begin": "<",
                    "end": ">",
                    "keywords": "reified",
                    "relevance": 0
                },
                {
                    "className": "params",
                    "begin": "\\(",
                    "end": "\\)",
                    "endsParent": true,
                    "keywords": {
                        "$ref": "#keywords"
                    },
                    "relevance": 0,
                    "contains": [
                        {
                            "begin": ":",
                            "end": "[=,\\\/]",
                            "endsWithParent": true,
                            "contains": [
                                {
                                    "variants": [
                                        {
                                            "className": "type",
                                            "begin": "[a-zA-Z_]\\w*"
                                        },
                                        {
                                            "begin": "\\(",
                                            "end": "\\)",
                                            "contains": [
                                                {
                                                    "$ref": "#contains.7.contains.2.contains.0.contains.0"
                                                }
                                            ]
                                        }
                                    ]
                                },
                                {
                                    "$ref": "#contains.1"
                                },
                                {
                                    "$ref": "#contains.2"
                                }
                            ],
                            "relevance": 0
                        },
                        {
                            "$ref": "#contains.1"
                        },
                        {
                            "$ref": "#contains.2"
                        },
                        {
                            "$ref": "#contains.5"
                        },
                        {
                            "$ref": "#contains.6"
                        },
                        {
                            "$ref": "#contains.6.contains.0.contains.0.variants.0.contains.1.contains.1"
                        },
                        {
                            "$ref": "#contains.6.contains.0.contains.0.variants.0.contains.1.contains.0"
                        }
                    ]
                },
                {
                    "$ref": "#contains.2"
                }
            ]
        },
        {
            "className": "class",
            "beginKeywords": "class interface trait",
            "end": "[:\\{(]|$",
            "excludeEnd": true,
            "illegal": "extends implements",
            "contains": [
                {
                    "beginKeywords": "public protected internal private constructor"
                },
                {
                    "$ref": "#contains.7.contains.0.contains.0"
                },
                {
                    "className": "type",
                    "begin": "<",
                    "end": ">",
                    "excludeBegin": true,
                    "excludeEnd": true,
                    "relevance": 0
                },
                {
                    "className": "type",
                    "begin": "[,:]\\s*",
                    "end": "[<\\(,]|$",
                    "excludeBegin": true,
                    "returnEnd": true
                },
                {
                    "$ref": "#contains.5"
                },
                {
                    "$ref": "#contains.6"
                }
            ]
        },
        {
            "$ref": "#contains.6.contains.0.contains.0.variants.0.contains.1.contains.1"
        },
        {
            "className": "meta",
            "begin": "^#!\/usr\/bin\/env",
            "end": "$",
            "illegal": "\n"
        },
        {
            "className": "number",
            "begin": "\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",
            "relevance": 0
        }
    ]
}
