{
    "aliases": [
        "dpr",
        "dfm",
        "pas",
        "pascal",
        "freepascal",
        "lazarus",
        "lpr",
        "lfm"
    ],
    "case_insensitive": true,
    "keywords": "exports register file shl array record property for mod while set ally label uses raise not stored class safecall var interface or private static exit index inherited to else stdcall override shr asm far resourcestring finalization packed virtual out and protected library do xorwrite goto near function end div overload object unit begin string on inline repeat until destructor write message program with read initialization except default nil if case cdecl in downto threadvar of try pascal const external constructor type public then implementation finally published procedure absolute reintroduce operator as is abstract alias assembler bitpacked break continue cppdecl cvar enumerator experimental platform deprecated unimplemented dynamic export far16 forward generic helper implements interrupt iochecks local name nodefault noreturn nostackframe oldfpccall otherwise saveregisters softfloat specialize strict unaligned varargs ",
    "illegal": "\"|\\$[G-Zg-z]|\\\/\\*|<\\\/|\\|",
    "contains": [
        {
            "className": "string",
            "begin": "'",
            "end": "'",
            "contains": [
                {
                    "begin": "''"
                }
            ]
        },
        {
            "className": "string",
            "begin": "(#\\d+)+"
        },
        {
            "className": "number",
            "begin": "\\b\\d+(\\.\\d+)?",
            "relevance": 0
        },
        {
            "begin": "[a-zA-Z]\\w*\\s*=\\s*class\\s*\\(",
            "returnBegin": true,
            "contains": [
                {
                    "className": "title",
                    "begin": "[a-zA-Z]\\w*",
                    "relevance": 0
                }
            ]
        },
        {
            "className": "function",
            "beginKeywords": "function constructor destructor procedure",
            "end": "[:;]",
            "keywords": "function constructor|10 destructor|10 procedure|10",
            "contains": [
                {
                    "$ref": "#contains.3.contains.0"
                },
                {
                    "className": "params",
                    "begin": "\\(",
                    "end": "\\)",
                    "keywords": "exports register file shl array record property for mod while set ally label uses raise not stored class safecall var interface or private static exit index inherited to else stdcall override shr asm far resourcestring finalization packed virtual out and protected library do xorwrite goto near function end div overload object unit begin string on inline repeat until destructor write message program with read initialization except default nil if case cdecl in downto threadvar of try pascal const external constructor type public then implementation finally published procedure absolute reintroduce operator as is abstract alias assembler bitpacked break continue cppdecl cvar enumerator experimental platform deprecated unimplemented dynamic export far16 forward generic helper implements interrupt iochecks local name nodefault noreturn nostackframe oldfpccall otherwise saveregisters softfloat specialize strict unaligned varargs ",
                    "contains": [
                        {
                            "$ref": "#contains.0"
                        },
                        {
                            "$ref": "#contains.1"
                        },
                        {
                            "className": "meta",
                            "variants": [
                                {
                                    "begin": "\\{\\$",
                                    "end": "\\}"
                                },
                                {
                                    "begin": "\\(\\*\\$",
                                    "end": "\\*\\)"
                                }
                            ]
                        },
                        {
                            "className": "comment",
                            "begin": "\/\/",
                            "end": "$",
                            "contains": [
                                {
                                    "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
                                }
                            ]
                        },
                        {
                            "className": "comment",
                            "begin": "\\{",
                            "end": "\\}",
                            "contains": [
                                {
                                    "$ref": "#contains.4.contains.1.contains.3.contains.0"
                                },
                                {
                                    "className": "doctag",
                                    "begin": "(?:TODO|FIXME|NOTE|BUG|XXX):",
                                    "relevance": 0
                                }
                            ],
                            "relevance": 0
                        },
                        {
                            "className": "comment",
                            "begin": "\\(\\*",
                            "end": "\\*\\)",
                            "contains": [
                                {
                                    "$ref": "#contains.4.contains.1.contains.3.contains.0"
                                },
                                {
                                    "className": "doctag",
                                    "begin": "(?:TODO|FIXME|NOTE|BUG|XXX):",
                                    "relevance": 0
                                }
                            ],
                            "relevance": 10
                        }
                    ]
                },
                {
                    "$ref": "#contains.4.contains.1.contains.2"
                },
                {
                    "$ref": "#contains.4.contains.1.contains.3"
                },
                {
                    "$ref": "#contains.4.contains.1.contains.4"
                },
                {
                    "$ref": "#contains.4.contains.1.contains.5"
                }
            ]
        },
        {
            "$ref": "#contains.4.contains.1.contains.2"
        },
        {
            "$ref": "#contains.4.contains.1.contains.3"
        },
        {
            "$ref": "#contains.4.contains.1.contains.4"
        },
        {
            "$ref": "#contains.4.contains.1.contains.5"
        }
    ]
}
