{"version":3,"sources":["jsdelivr-header.js","/npm/sparser@1.4.12/js/parse.js"],"names":[],"mappings":"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","file":"/npm/sparser@1.4.12/js/parse.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/sparser@1.4.12/js/parse.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/*jslint node:true */\r\n/*eslint-env node*/\r\n/*eslint no-console:0*/\r\n(function parse_init() {\r\n    \"use strict\";\r\n    const parser = function parse_parser() {\r\n        const langstore = [sparser.options.language, sparser.options.lexer];\r\n        parse.count = -1;\r\n        parse.data = {\r\n            begin: [],\r\n            ender: [],\r\n            lexer: [],\r\n            lines: [],\r\n            stack: [],\r\n            token: [],\r\n            types: []\r\n        };\r\n        parse.datanames = [\r\n            \"begin\",\r\n            \"ender\",\r\n            \"lexer\",\r\n            \"lines\",\r\n            \"stack\",\r\n            \"token\",\r\n            \"types\"\r\n        ];\r\n        parse.linesSpace = 0;\r\n        parse.lineNumber = 1;\r\n        parse.structure = [\r\n            [\"global\", -1]\r\n        ];\r\n        parse.structure.pop = function parse_structure_pop() {\r\n            const len = parse.structure.length - 1, arr = parse.structure[len];\r\n            if (len > 0) {\r\n                parse\r\n                    .structure\r\n                    .splice(len, 1);\r\n            }\r\n            return arr;\r\n        };\r\n        if (sparser.options.language === \"auto\" || sparser.options.lexer === \"auto\") {\r\n            let lang = sparser.libs.language.auto(sparser.options.source, \"javascript\");\r\n            if (sparser.options.language === \"auto\") {\r\n                sparser.options.language = lang[0];\r\n            }\r\n            if (sparser.options.lexer === \"auto\") {\r\n                sparser.options.lexer = lang[1];\r\n            }\r\n        }\r\n        if (typeof sparser.lexers[sparser.options.lexer] === \"function\") {\r\n            sparser.parseerror = \"\";\r\n            // reset references data if sparser is used on multiple files\r\n            parse.references = [[]];\r\n            sparser.options.lexer_options = (sparser.options.lexer_options || {});\r\n            Object.keys(sparser.lexers).forEach(function parse_lexers(value) {\r\n                sparser.options.lexer_options[value] = (sparser.options.lexer_options[value] || {});\r\n            });\r\n            // This line parses the code using a lexer file\r\n            sparser.lexers[sparser.options.lexer](`${sparser.options.source} `);\r\n            // restore language and lexer values\r\n        }\r\n        else {\r\n            sparser.parseerror = `Specified lexer, ${sparser.options.lexer}, is not a function.`;\r\n        }\r\n        // validate that all the data arrays are the same length\r\n        (function parser_checkLengths() {\r\n            let a = 0, b = 0;\r\n            const keys = Object.keys(parse.data), c = keys.length;\r\n            do {\r\n                b = a + 1;\r\n                do {\r\n                    if (parse.data[keys[a]].length !== parse.data[keys[b]].length) {\r\n                        sparser.parseerror = `\"${keys[a]}\" array is of different length than \"${keys[b]}\"`;\r\n                        break;\r\n                    }\r\n                    b = b + 1;\r\n                } while (b < c);\r\n                a = a + 1;\r\n            } while (a < c - 1);\r\n        }());\r\n        // fix begin values.  They must be reconsidered after reordering from object sort\r\n        if (parse.data.begin.length > 0 && (sparser.options.lexer_options[sparser.options.lexer].object_sort === true || sparser.options.lexer_options.markup.tag_sort === true)) {\r\n            parse.sortCorrection(0, parse.count + 1);\r\n        }\r\n        if (sparser.options.format === \"csv\") {\r\n            let a = 0;\r\n            const d = parse.data, data = [\"index,begin,ender,lexer,lines,stack,token,types\"], len = parse.count + 1;\r\n            do {\r\n                data.push([\r\n                    a,\r\n                    d.begin[a],\r\n                    d.ender[a],\r\n                    `\"${d.lexer[a].replace(/\"/g, \"\\\"\\\"\")}\"`,\r\n                    d.lines[a],\r\n                    `\"${d.stack[a].replace(/\"/g, \"\\\"\\\"\")}\"`,\r\n                    `\"${d.token[a].replace(/\"/g, \"\\\"\\\"\")}\"`,\r\n                    `\"${d.types[a].replace(/\"/g, \"\\\"\\\"\")}\"`\r\n                ].join(\",\"));\r\n                a = a + 1;\r\n            } while (a < len);\r\n            return data.join(\"\\r\\n\");\r\n        }\r\n        if (sparser.options.format === \"markdown\") {\r\n            let a = 0, b = 0, strlen = 0, row = [], heading = \"\", line = \"\", str = \"\", begin = 0;\r\n            const data = [], names = parse.datanames, longest = [1, 5, 5, 5, 5, 5, 5, 5], len = parse.count + 1;\r\n            // first gather the string length of each data item\r\n            longest[0] = String(parse.count).length;\r\n            if (longest[0] < 5) {\r\n                longest[0] = 5;\r\n            }\r\n            do {\r\n                begin = String(parse.data.begin[a]).length;\r\n                if (begin > longest[1]) {\r\n                    longest[1] = begin;\r\n                }\r\n                begin = String(parse.data.ender[a]).length;\r\n                if (begin > longest[2]) {\r\n                    longest[2] = begin;\r\n                }\r\n                if (parse.data.lexer[a].length > longest[3]) {\r\n                    longest[3] = parse.data.lexer[a].length;\r\n                }\r\n                begin = String(parse.data.lines[a]).length;\r\n                if (begin > longest[4]) {\r\n                    longest[4] = begin;\r\n                }\r\n                if (parse.data.stack[a].length > longest[5]) {\r\n                    longest[5] = parse.data.stack[a].length;\r\n                }\r\n                if (parse.data.token[a].length > longest[6]) {\r\n                    longest[6] = parse.data.token[a].length;\r\n                }\r\n                if (parse.data.types[a].length > longest[7]) {\r\n                    longest[7] = parse.data.types[a].length;\r\n                }\r\n                a = a + 1;\r\n            } while (a < len);\r\n            names.splice(0, 0, \"index\");\r\n            // second create the heading\r\n            a = 0;\r\n            do {\r\n                row.push(parse.datanames[a]);\r\n                if (longest[a] > 5) {\r\n                    b = 5;\r\n                    do {\r\n                        row.push(\" \");\r\n                        b = b + 1;\r\n                    } while (b < longest[a]);\r\n                }\r\n                row.push(\"|\");\r\n                a = a + 1;\r\n            } while (a < 8);\r\n            row.pop();\r\n            heading = row.join(\"\");\r\n            row = [];\r\n            // third create the line of dashes\r\n            a = 0;\r\n            do {\r\n                b = 0;\r\n                do {\r\n                    row.push(\"-\");\r\n                    b = b + 1;\r\n                } while (b < longest[a]);\r\n                row.push(\"|\");\r\n                a = a + 1;\r\n            } while (a < 8);\r\n            row.pop();\r\n            line = row.join(\"\");\r\n            row = [];\r\n            // fourth create each data record\r\n            a = 0;\r\n            do {\r\n                if (a % 100 === 0) {\r\n                    data.push(heading);\r\n                    data.push(line);\r\n                }\r\n                str = String(a);\r\n                row.push(str);\r\n                b = str.length;\r\n                if (b < longest[0]) {\r\n                    do {\r\n                        row.push(\" \");\r\n                        b = b + 1;\r\n                    } while (b < longest[0]);\r\n                }\r\n                row.push(\"|\");\r\n                b = 1;\r\n                do {\r\n                    str = String(parse.data[parse.datanames[b]][a]);\r\n                    row.push(str);\r\n                    strlen = str.length;\r\n                    if (strlen < longest[b]) {\r\n                        do {\r\n                            row.push(\" \");\r\n                            strlen = strlen + 1;\r\n                        } while (strlen < longest[b]);\r\n                    }\r\n                    row.push(\"|\");\r\n                    b = b + 1;\r\n                } while (b < 8);\r\n                row.pop();\r\n                data.push(row.join(\"\"));\r\n                row = [];\r\n                a = a + 1;\r\n            } while (a < len);\r\n            return data.join(\"\\r\\n\");\r\n        }\r\n        if (sparser.options.format === \"minimal\") {\r\n            let a = 0;\r\n            const data = [], len = parse.count + 1;\r\n            do {\r\n                data.push([\r\n                    parse.data.begin[a],\r\n                    parse.data.ender[a],\r\n                    parse.data.lexer[a],\r\n                    parse.data.lines[a],\r\n                    parse.data.stack[a],\r\n                    parse.data.token[a],\r\n                    parse.data.types[a]\r\n                ]);\r\n                a = a + 1;\r\n            } while (a < len);\r\n            return data;\r\n        }\r\n        if (sparser.options.format === \"objects\") {\r\n            let a = 0;\r\n            const data = [], len = parse.count + 1;\r\n            do {\r\n                data.push({\r\n                    begin: parse.data.begin[a],\r\n                    ender: parse.data.ender[a],\r\n                    lexer: parse.data.lexer[a],\r\n                    lines: parse.data.lines[a],\r\n                    stack: parse.data.stack[a],\r\n                    token: parse.data.token[a],\r\n                    types: parse.data.types[a]\r\n                });\r\n                a = a + 1;\r\n            } while (a < len);\r\n            return data;\r\n        }\r\n        if (sparser.options.format === \"testprep\") {\r\n            let a = 0;\r\n            const data = [], len = parse.count + 1;\r\n            if (sparser.parseerror !== \"\") {\r\n                return sparser.parseerror;\r\n            }\r\n            do {\r\n                data.push(JSON.stringify({\r\n                    begin: parse.data.begin[a],\r\n                    ender: parse.data.ender[a],\r\n                    lexer: parse.data.lexer[a],\r\n                    lines: parse.data.lines[a],\r\n                    stack: parse.data.stack[a],\r\n                    token: parse.data.token[a],\r\n                    types: parse.data.types[a]\r\n                }));\r\n                a = a + 1;\r\n            } while (a < len);\r\n            return `[\\n${data.join(\",\\n\")}\\n]`;\r\n        }\r\n        sparser.options.language = langstore[0];\r\n        sparser.options.lexer = langstore[1];\r\n        return parse.data;\r\n    }, parse = {\r\n        // stores the final index location of the data arrays\r\n        count: -1,\r\n        // stores the various data arrays of the parse table\r\n        data: {\r\n            begin: [],\r\n            ender: [],\r\n            lexer: [],\r\n            lines: [],\r\n            stack: [],\r\n            token: [],\r\n            types: []\r\n        },\r\n        // stores the name of the data arrays.  This is used for internal automation\r\n        datanames: [\"begin\", \"ender\", \"lexer\", \"lines\", \"stack\", \"token\", \"types\"],\r\n        // stores the current line number from the input string for logging parse errors\r\n        lineNumber: 1,\r\n        // stores the 'lines' value before the next token\r\n        linesSpace: 0,\r\n        // stores the declared variable names for the script lexer.  This must be stored outside the script lexer since some languages recursive use of the script lexer\r\n        references: [[]],\r\n        // stores the stack and begin values by stacking depth\r\n        structure: [[\"global\", -1]],\r\n        // an extension of Array.prototype.concat to work across the data structure.  This is an expensive operation.\r\n        concat: function parse_concat(data, array) {\r\n            parse\r\n                .datanames\r\n                .forEach(function parse_concat_datanames(value) {\r\n                data[value] = data[value].concat(array[value]);\r\n            });\r\n            if (data === parse.data) {\r\n                parse.count = data.token.length - 1;\r\n            }\r\n        },\r\n        // the function that sorts object properties\r\n        object_sort: function parse_objectSort(data) {\r\n            let cc = parse.count, global = (data.lexer[cc] === \"style\" && parse.structure[parse.structure.length - 1][0] === \"global\"), dd = parse.structure[parse.structure.length - 1][1], ee = 0, ff = 0, gg = 0, behind = 0, commaTest = true, front = 0, keyend = 0, keylen = 0;\r\n            const keys = [], length = parse.count, begin = dd, stack = (global === true)\r\n                ? \"global\"\r\n                : parse.structure[parse.structure.length - 1][0], style = (data.lexer[cc] === \"style\"), delim = (style === true)\r\n                ? [\";\", \"separator\"]\r\n                : [\",\", \"separator\"], lines = parse.linesSpace, sort = function parse_objectSort_sort(x, y) {\r\n                let xx = x[0], yy = y[0];\r\n                if (data.types[xx] === \"comment\") {\r\n                    do {\r\n                        xx = xx + 1;\r\n                    } while (xx < length && (data.types[xx] === \"comment\"));\r\n                    if (data.token[xx] === undefined) {\r\n                        return 1;\r\n                    }\r\n                }\r\n                if (data.types[yy] === \"comment\") {\r\n                    do {\r\n                        yy = yy + 1;\r\n                    } while (yy < length && (data.types[yy] === \"comment\"));\r\n                    if (data.token[yy] === undefined) {\r\n                        return 1;\r\n                    }\r\n                }\r\n                if (style === true) {\r\n                    if (data.token[xx].indexOf(\"@import\") === 0 || data.token[yy].indexOf(\"@import\") === 0) {\r\n                        // JavaScript's standard array sort uses implementation specific algorithms.\r\n                        // This simple numeric trick forces conformance.\r\n                        if (xx < yy) {\r\n                            return -1;\r\n                        }\r\n                        return 1;\r\n                    }\r\n                    if (data.types[xx] !== data.types[yy]) {\r\n                        if (data.types[xx] === \"function\") {\r\n                            return 1;\r\n                        }\r\n                        if (data.types[xx] === \"variable\") {\r\n                            return -1;\r\n                        }\r\n                        if (data.types[xx] === \"selector\") {\r\n                            return 1;\r\n                        }\r\n                        if (data.types[xx] === \"property\" && data.types[yy] !== \"variable\") {\r\n                            return -1;\r\n                        }\r\n                        if (data.types[xx] === \"mixin\" && data.types[yy] !== \"property\" && data.types[yy] !== \"variable\") {\r\n                            return -1;\r\n                        }\r\n                    }\r\n                }\r\n                if (data.token[xx].toLowerCase() > data.token[yy].toLowerCase()) {\r\n                    return 1;\r\n                }\r\n                return -1;\r\n            }, store = {\r\n                begin: [],\r\n                ender: [],\r\n                lexer: [],\r\n                lines: [],\r\n                stack: [],\r\n                token: [],\r\n                types: []\r\n            };\r\n            behind = cc;\r\n            do {\r\n                if (data.begin[cc] === dd || (global === true && cc < behind && data.token[cc] === \"}\" && data.begin[data.begin[cc]] === -1)) {\r\n                    if (data.types[cc].indexOf(\"template\") > -1) {\r\n                        return;\r\n                    }\r\n                    if (data.token[cc] === delim[0] || (style === true && data.token[cc] === \"}\" && data.token[cc + 1] !== \";\")) {\r\n                        commaTest = true;\r\n                        front = cc + 1;\r\n                    }\r\n                    else if (style === true && data.token[cc - 1] === \"}\") {\r\n                        commaTest = true;\r\n                        front = cc;\r\n                    }\r\n                    if (front === 0 && data.types[0] === \"comment\") {\r\n                        // keep top comments at the top\r\n                        do {\r\n                            front = front + 1;\r\n                        } while (data.types[front] === \"comment\");\r\n                    }\r\n                    else if (data.types[front] === \"comment\" && data.lines[front] < 2) {\r\n                        // if a comment follows code on the same line then keep the comment next to the code it follows\r\n                        front = front + 1;\r\n                    }\r\n                    if (commaTest === true && (data.token[cc] === delim[0] || (style === true && data.token[cc - 1] === \"}\")) && front <= behind) {\r\n                        if (style === true && \"};\".indexOf(data.token[behind]) < 0) {\r\n                            behind = behind + 1;\r\n                        }\r\n                        else if (style === false && data.token[behind] !== \",\") {\r\n                            behind = behind + 1;\r\n                        }\r\n                        keys.push([front, behind]);\r\n                        if (style === true && data.token[front] === \"}\") {\r\n                            behind = front;\r\n                        }\r\n                        else {\r\n                            behind = front - 1;\r\n                        }\r\n                    }\r\n                }\r\n                cc = cc - 1;\r\n            } while (cc > dd);\r\n            if (keys.length > 0 && keys[keys.length - 1][0] > cc + 1) {\r\n                ee = keys[keys.length - 1][0] - 1;\r\n                if (data.types[ee] === \"comment\" && data.lines[ee] > 1) {\r\n                    do {\r\n                        ee = ee - 1;\r\n                    } while (ee > 0 && data.types[ee] === \"comment\");\r\n                    keys[keys.length - 1][0] = ee + 1;\r\n                }\r\n                if (data.types[cc + 1] === \"comment\" && cc === -1) {\r\n                    do {\r\n                        cc = cc + 1;\r\n                    } while (data.types[cc + 1] === \"comment\");\r\n                }\r\n                keys.push([\r\n                    cc + 1,\r\n                    ee\r\n                ]);\r\n            }\r\n            if (keys.length > 1) {\r\n                if (style === true || data.token[cc - 1] === \"=\" || data.token[cc - 1] === \":\" || data.token[cc - 1] === \"(\" || data.token[cc - 1] === \"[\" || data.token[cc - 1] === \",\" || data.types[cc - 1] === \"word\" || cc === 0) {\r\n                    keys.sort(sort);\r\n                    keylen = keys.length;\r\n                    commaTest = false;\r\n                    dd = 0;\r\n                    do {\r\n                        keyend = keys[dd][1];\r\n                        if (style === true) {\r\n                            gg = keyend;\r\n                            if (data.types[gg] === \"comment\") {\r\n                                gg = gg - 1;\r\n                            }\r\n                            if (data.token[gg] === \"}\") {\r\n                                keyend = keyend + 1;\r\n                                delim[0] = \"}\";\r\n                                delim[1] = \"end\";\r\n                            }\r\n                            else {\r\n                                delim[0] = \";\";\r\n                                delim[1] = \"separator\";\r\n                            }\r\n                        }\r\n                        ee = keys[dd][0];\r\n                        if (style === true && data.types[keyend - 1] !== \"end\" && data.types[keyend] === \"comment\" && data.types[keyend + 1] !== \"comment\" && dd < keylen - 1) {\r\n                            // missing a terminal comment causes many problems\r\n                            keyend = keyend + 1;\r\n                        }\r\n                        if (ee < keyend) {\r\n                            do {\r\n                                if (style === false && dd === keylen - 1 && ee === keyend - 2 && data.token[ee] === \",\" && data.lexer[ee] === \"script\" && data.types[ee + 1] === \"comment\") {\r\n                                    // do not include terminal commas that are followed by a comment\r\n                                    ff = ff + 1;\r\n                                }\r\n                                else {\r\n                                    parse.push(store, {\r\n                                        begin: data.begin[ee],\r\n                                        ender: data.begin[ee],\r\n                                        lexer: data.lexer[ee],\r\n                                        lines: data.lines[ee],\r\n                                        stack: data.stack[ee],\r\n                                        token: data.token[ee],\r\n                                        types: data.types[ee]\r\n                                    }, \"\");\r\n                                    ff = ff + 1;\r\n                                }\r\n                                //remove extra commas\r\n                                if (data.token[ee] === delim[0] && (style === true || data.begin[ee] === data.begin[keys[dd][0]])) {\r\n                                    commaTest = true;\r\n                                }\r\n                                else if (data.token[ee] !== delim[0] && data.types[ee] !== \"comment\") {\r\n                                    commaTest = false;\r\n                                }\r\n                                ee = ee + 1;\r\n                            } while (ee < keyend);\r\n                        }\r\n                        // injecting the list delimiter\r\n                        if (commaTest === false && store.token[store.token.length - 1] !== \"x;\" && (style === true || dd < keylen - 1)) {\r\n                            ee = store.types.length - 1;\r\n                            if (store.types[ee] === \"comment\") {\r\n                                do {\r\n                                    ee = ee - 1;\r\n                                } while (ee > 0 && (store.types[ee] === \"comment\"));\r\n                            }\r\n                            ee = ee + 1;\r\n                            parse.splice({\r\n                                data: store,\r\n                                howmany: 0,\r\n                                index: ee,\r\n                                record: {\r\n                                    begin: begin,\r\n                                    ender: parse.count,\r\n                                    lexer: store.lexer[ee - 1],\r\n                                    lines: 0,\r\n                                    stack: stack,\r\n                                    token: delim[0],\r\n                                    types: delim[1]\r\n                                }\r\n                            });\r\n                            ff = ff + 1;\r\n                        }\r\n                        dd = dd + 1;\r\n                    } while (dd < keylen);\r\n                    parse.splice({\r\n                        data: data,\r\n                        howmany: ff,\r\n                        index: cc + 1\r\n                    });\r\n                    parse.linesSpace = lines;\r\n                    parse.concat(data, store);\r\n                    return;\r\n                }\r\n            }\r\n            return;\r\n        },\r\n        // an extension of Array.prototype.pop to work across the data structure\r\n        pop: function parse_pop(data) {\r\n            const output = {\r\n                begin: data.begin.pop(),\r\n                ender: data.ender.pop(),\r\n                lexer: data.lexer.pop(),\r\n                lines: data.lines.pop(),\r\n                stack: data.stack.pop(),\r\n                token: data.token.pop(),\r\n                types: data.types.pop()\r\n            };\r\n            if (data === parse.data) {\r\n                parse.count = parse.count - 1;\r\n            }\r\n            return output;\r\n        },\r\n        // an extension of Array.prototype.push to work across the data structure\r\n        push: function parse_push(data, record, structure) {\r\n            const ender = function parse_push_ender() {\r\n                let a = parse.count;\r\n                const begin = data.begin[a];\r\n                if ((data.lexer[a] === \"markup\" && sparser.options.lexer_options.markup.tag_sort === true) ||\r\n                    ((data.lexer[a] === \"script\" || data.lexer[a] === \"style\") && sparser.options.lexer_options[data.lexer[a]].object_sort === true)) {\r\n                    // sorting can result in a token whose begin value is greater than either\r\n                    // its current index or the index of the end token, which results in an endless loop\r\n                    //\r\n                    // these end values are addressed at the end of the \"parser\" function with parse.sortCorrection\r\n                    return;\r\n                }\r\n                do {\r\n                    if (data.begin[a] === begin || (data.begin[data.begin[a]] === begin && data.types[a].indexOf(\"attribute\") > -1 && data.types[a].indexOf(\"attribute_end\") < 0)) {\r\n                        data.ender[a] = parse.count;\r\n                    }\r\n                    else {\r\n                        a = data.begin[a];\r\n                    }\r\n                    a = a - 1;\r\n                } while (a > begin);\r\n                if (a > -1) {\r\n                    data.ender[a] = parse.count;\r\n                }\r\n            };\r\n            parse\r\n                .datanames\r\n                .forEach(function parse_push_datanames(value) {\r\n                data[value].push(record[value]);\r\n            });\r\n            if (data === parse.data) {\r\n                parse.count = parse.count + 1;\r\n                parse.linesSpace = 0;\r\n                if (record.lexer !== \"style\") {\r\n                    if (structure.replace(/(\\{|\\}|@|<|>|%|#|)/g, \"\") === \"\") {\r\n                        if (record.types === \"else\") {\r\n                            structure = \"else\";\r\n                        }\r\n                        else {\r\n                            structure = record.token;\r\n                        }\r\n                    }\r\n                    else if ((/^<\\?(=|(php))/).test(structure) === false) {\r\n                        structure = structure.replace(/(\\{|\\}|@|<|>|%|#|)\\s*/g, \"\");\r\n                    }\r\n                }\r\n                if (record.types === \"start\" || record.types.indexOf(\"_start\") > 0) {\r\n                    parse.structure.push([structure, parse.count]);\r\n                }\r\n                else if (record.types === \"end\" || record.types.indexOf(\"_end\") > 0) {\r\n                    // this big condition fixes language specific else blocks that are children of start/end blocks not associated with the if/else chain\r\n                    let case_ender = 0;\r\n                    if (parse.structure.length > 2 &&\r\n                        (data.types[parse.structure[parse.structure.length - 1][1]] === \"else\" || data.types[parse.structure[parse.structure.length - 1][1]].indexOf(\"_else\") > 0) &&\r\n                        (data.types[parse.structure[parse.structure.length - 2][1]] === \"start\" || data.types[parse.structure[parse.structure.length - 2][1]].indexOf(\"_start\") > 0) &&\r\n                        (data.types[parse.structure[parse.structure.length - 2][1] + 1] === \"else\" || data.types[parse.structure[parse.structure.length - 2][1] + 1].indexOf(\"_else\") > 0)) {\r\n                        parse.structure.pop();\r\n                        data.begin[parse.count] = parse.structure[parse.structure.length - 1][1];\r\n                        data.stack[parse.count] = parse.structure[parse.structure.length - 1][0];\r\n                        data.ender[parse.count - 1] = parse.count;\r\n                        case_ender = data.ender[data.begin[parse.count] + 1];\r\n                    }\r\n                    ender();\r\n                    if (case_ender > 0) {\r\n                        data.ender[data.begin[parse.count] + 1] = case_ender;\r\n                    }\r\n                    parse.structure.pop();\r\n                }\r\n                else if (record.types === \"else\" || record.types.indexOf(\"_else\") > 0) {\r\n                    if (structure === \"\") {\r\n                        structure = \"else\";\r\n                    }\r\n                    if (parse.count > 0 && (data.types[parse.count - 1] === \"start\" || data.types[parse.count - 1].indexOf(\"_start\") > 0)) {\r\n                        parse.structure.push([structure, parse.count]);\r\n                    }\r\n                    else {\r\n                        ender();\r\n                        if (structure === \"\") {\r\n                            parse.structure[parse.structure.length - 1] = [\"else\", parse.count];\r\n                        }\r\n                        else {\r\n                            parse.structure[parse.structure.length - 1] = [structure, parse.count];\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        },\r\n        // a custom sort tool that is a bit more intelligent and multidimensional than Array.prototype.sort\r\n        safeSort: function parse_safeSort(array, operation, recursive) {\r\n            let extref = function parse_safeSort_extref(item) {\r\n                //worthless function for backwards compatibility with older versions of V8 node.\r\n                return item;\r\n            };\r\n            const arTest = function parse_safeSort_arTest(item) {\r\n                if (Array.isArray(item) === true) {\r\n                    return true;\r\n                }\r\n                return false;\r\n            }, normal = function parse_safeSort_normal(item) {\r\n                let storeb = item;\r\n                const done = [item[0]], child = function safeSort_normal_child() {\r\n                    let a = 0;\r\n                    const len = storeb.length;\r\n                    if (a < len) {\r\n                        do {\r\n                            if (arTest(storeb[a]) === true) {\r\n                                storeb[a] = parse_safeSort_normal(storeb[a]);\r\n                            }\r\n                            a = a + 1;\r\n                        } while (a < len);\r\n                    }\r\n                }, recurse = function parse_safeSort_normal_recurse(x) {\r\n                    let a = 0;\r\n                    const storea = [], len = storeb.length;\r\n                    if (a < len) {\r\n                        do {\r\n                            if (storeb[a] !== x) {\r\n                                storea.push(storeb[a]);\r\n                            }\r\n                            a = a + 1;\r\n                        } while (a < len);\r\n                    }\r\n                    storeb = storea;\r\n                    if (storea.length > 0) {\r\n                        done.push(storea[0]);\r\n                        extref(storea[0]);\r\n                    }\r\n                    else {\r\n                        if (recursive === true) {\r\n                            child();\r\n                        }\r\n                        item = storeb;\r\n                    }\r\n                };\r\n                extref = recurse;\r\n                recurse(array[0]);\r\n                return item;\r\n            }, descend = function parse_safeSort_descend(item) {\r\n                let c = 0;\r\n                const len = item.length, storeb = item, child = function parse_safeSort_descend_child() {\r\n                    let a = 0;\r\n                    const lenc = storeb.length;\r\n                    if (a < lenc) {\r\n                        do {\r\n                            if (arTest(storeb[a]) === true) {\r\n                                storeb[a] = parse_safeSort_descend(storeb[a]);\r\n                            }\r\n                            a = a + 1;\r\n                        } while (a < lenc);\r\n                    }\r\n                }, recurse = function parse_safeSort_descend_recurse(value) {\r\n                    let a = c, b = 0, d = 0, e = 0, ind = [], key = storeb[c], tstore = \"\";\r\n                    const tkey = typeof key;\r\n                    if (a < len) {\r\n                        do {\r\n                            tstore = typeof storeb[a];\r\n                            if (storeb[a] > key || (tstore > tkey)) {\r\n                                key = storeb[a];\r\n                                ind = [a];\r\n                            }\r\n                            else if (storeb[a] === key) {\r\n                                ind.push(a);\r\n                            }\r\n                            a = a + 1;\r\n                        } while (a < len);\r\n                    }\r\n                    d = ind.length;\r\n                    a = c;\r\n                    b = d + c;\r\n                    if (a < b) {\r\n                        do {\r\n                            storeb[ind[e]] = storeb[a];\r\n                            storeb[a] = key;\r\n                            e = e + 1;\r\n                            a = a + 1;\r\n                        } while (a < b);\r\n                    }\r\n                    c = c + d;\r\n                    if (c < len) {\r\n                        extref(\"\");\r\n                    }\r\n                    else {\r\n                        if (recursive === true) {\r\n                            child();\r\n                        }\r\n                        item = storeb;\r\n                    }\r\n                    return value;\r\n                };\r\n                extref = recurse;\r\n                recurse(\"\");\r\n                return item;\r\n            }, ascend = function parse_safeSort_ascend(item) {\r\n                let c = 0;\r\n                const len = item.length, storeb = item, child = function parse_safeSort_ascend_child() {\r\n                    let a = 0;\r\n                    const lenc = storeb.length;\r\n                    if (a < lenc) {\r\n                        do {\r\n                            if (arTest(storeb[a]) === true) {\r\n                                storeb[a] = parse_safeSort_ascend(storeb[a]);\r\n                            }\r\n                            a = a + 1;\r\n                        } while (a < lenc);\r\n                    }\r\n                }, recurse = function parse_safeSort_ascend_recurse(value) {\r\n                    let a = c, b = 0, d = 0, e = 0, ind = [], key = storeb[c], tstore = \"\";\r\n                    const tkey = typeof key;\r\n                    if (a < len) {\r\n                        do {\r\n                            tstore = typeof storeb[a];\r\n                            if (storeb[a] < key || tstore < tkey) {\r\n                                key = storeb[a];\r\n                                ind = [a];\r\n                            }\r\n                            else if (storeb[a] === key) {\r\n                                ind.push(a);\r\n                            }\r\n                            a = a + 1;\r\n                        } while (a < len);\r\n                    }\r\n                    d = ind.length;\r\n                    a = c;\r\n                    b = d + c;\r\n                    if (a < b) {\r\n                        do {\r\n                            storeb[ind[e]] = storeb[a];\r\n                            storeb[a] = key;\r\n                            e = e + 1;\r\n                            a = a + 1;\r\n                        } while (a < b);\r\n                    }\r\n                    c = c + d;\r\n                    if (c < len) {\r\n                        extref(\"\");\r\n                    }\r\n                    else {\r\n                        if (recursive === true) {\r\n                            child();\r\n                        }\r\n                        item = storeb;\r\n                    }\r\n                    return value;\r\n                };\r\n                extref = recurse;\r\n                recurse(\"\");\r\n                return item;\r\n            };\r\n            if (arTest(array) === false) {\r\n                return array;\r\n            }\r\n            if (operation === \"normal\") {\r\n                return normal(array);\r\n            }\r\n            if (operation === \"descend\") {\r\n                return descend(array);\r\n            }\r\n            return ascend(array);\r\n        },\r\n        // this functionality provides corrections to the \"begin\" and \"ender\" values after use of object_sort\r\n        sortCorrection: function parse_sortCorrection(start, end) {\r\n            let a = start, endslen = -1;\r\n            const data = parse.data, ends = [], structure = (parse.structure.length < 2)\r\n                ? [-1]\r\n                : [parse.structure[parse.structure.length - 2][1]];\r\n            // this first loop solves for the begin values\r\n            do {\r\n                if (a > 0 &&\r\n                    data.types[a].indexOf(\"attribute\") > -1 &&\r\n                    data.types[a].indexOf(\"end\") < 0 &&\r\n                    data.types[a - 1].indexOf(\"start\") < 0 &&\r\n                    data.types[a - 1].indexOf(\"attribute\") < 0 &&\r\n                    data.lexer[a] === \"markup\") {\r\n                    structure.push(a - 1);\r\n                }\r\n                if (a > 0 &&\r\n                    data.types[a - 1].indexOf(\"attribute\") > -1 &&\r\n                    data.types[a].indexOf(\"attribute\") < 0 &&\r\n                    data.lexer[structure[structure.length - 1]] === \"markup\" &&\r\n                    data.types[structure[structure.length - 1]].indexOf(\"start\") < 0) {\r\n                    structure.pop();\r\n                }\r\n                if (data.begin[a] !== structure[structure.length - 1]) {\r\n                    if (structure.length > 0) {\r\n                        data.begin[a] = structure[structure.length - 1];\r\n                    }\r\n                    else {\r\n                        data.begin[a] = -1;\r\n                    }\r\n                }\r\n                if (data.types[a].indexOf(\"else\") > -1) {\r\n                    if (structure.length > 0) {\r\n                        structure[structure.length - 1] = a;\r\n                    }\r\n                    else {\r\n                        structure.push(a);\r\n                    }\r\n                }\r\n                if (data.types[a].indexOf(\"end\") > -1) {\r\n                    structure.pop();\r\n                }\r\n                if (data.types[a].indexOf(\"start\") > -1) {\r\n                    structure.push(a);\r\n                }\r\n                a = a + 1;\r\n            } while (a < end);\r\n            // and now for the ender values\r\n            a = end;\r\n            do {\r\n                a = a - 1;\r\n                if (data.types[a].indexOf(\"end\") > -1) {\r\n                    ends.push(a);\r\n                    endslen = endslen + 1;\r\n                }\r\n                if (endslen > -1) {\r\n                    data.ender[a] = ends[endslen];\r\n                }\r\n                else {\r\n                    data.ender[a] = -1;\r\n                }\r\n                if (data.types[a].indexOf(\"start\") > -1) {\r\n                    ends.pop();\r\n                    endslen = endslen - 1;\r\n                }\r\n            } while (a > start);\r\n        },\r\n        // a simple tool to take note of whitespace between tokens\r\n        spacer: function parse_spacer(args) {\r\n            // * array - the characters to scan\r\n            // * index - the index to start scanning from\r\n            // * end   - the length of the array, to break the loop\r\n            parse.linesSpace = 1;\r\n            do {\r\n                if (args.array[args.index] === \"\\n\") {\r\n                    parse.linesSpace = parse.linesSpace + 1;\r\n                    parse.lineNumber = parse.lineNumber + 1;\r\n                }\r\n                if ((/\\s/).test(args.array[args.index + 1]) === false) {\r\n                    break;\r\n                }\r\n                args.index = args.index + 1;\r\n            } while (args.index < args.end);\r\n            return args.index;\r\n        },\r\n        // an extension of Array.prototype.splice to work across the data structure\r\n        splice: function parse_splice(spliceData) {\r\n            const finalItem = [parse.data.begin[parse.count], parse.data.token[parse.count]];\r\n            // * data    - The data object to alter\r\n            // * howmany - How many indexes to remove\r\n            // * index   - The index where to start\r\n            // * record  - A new record to insert\r\n            if (spliceData.record !== undefined && spliceData.record.token !== \"\") {\r\n                parse\r\n                    .datanames\r\n                    .forEach(function parse_splice_datanames(value) {\r\n                    spliceData\r\n                        .data[value]\r\n                        .splice(spliceData.index, spliceData.howmany, spliceData.record[value]);\r\n                });\r\n                if (spliceData.data === parse.data) {\r\n                    parse.count = (parse.count - spliceData.howmany) + 1;\r\n                    if (finalItem[0] !== parse.data.begin[parse.count] || finalItem[1] !== parse.data.token[parse.count]) {\r\n                        parse.linesSpace = 0;\r\n                    }\r\n                }\r\n                return;\r\n            }\r\n            parse\r\n                .datanames\r\n                .forEach(function parse_splice_datanames(value) {\r\n                spliceData\r\n                    .data[value]\r\n                    .splice(spliceData.index, spliceData.howmany);\r\n            });\r\n            if (spliceData.data === parse.data) {\r\n                parse.count = parse.count - spliceData.howmany;\r\n                parse.linesSpace = 0;\r\n            }\r\n        },\r\n        // parsing block comments and simultaneously applying word wrap\r\n        wrapCommentBlock: function parse_wrapCommentBlock(config) {\r\n            let a = config.start, b = 0, c = 0, d = 0, len = 0, lines = [], space = \"\", bline = \"\", spaceLine, emptyLine = false, bulletLine = false, numberLine = false, bigLine = false, output = \"\", terml = config.terminator.length - 1, term = config.terminator.charAt(terml), twrap = 0;\r\n            const build = [], second = [], lf = (sparser.options.crlf === true)\r\n                ? \"\\r\\n\"\r\n                : \"\\n\", sanitize = function parse_wrapCommentBlock_sanitize(input) {\r\n                return `\\\\${input}`;\r\n            }, regEsc = (/(\\/|\\\\|\\||\\*|\\[|\\]|\\{|\\})/g), regEnd = new RegExp(`\\\\s*${config.terminator.replace(regEsc, sanitize)}$`), regIgnore = new RegExp(`^(${config.opening.replace(regEsc, sanitize)}\\\\s*parse-ignore-start)`), regStart = new RegExp(`(${config.opening.replace(regEsc, sanitize)}\\\\s*)`), wrap = sparser.options.wrap, emptyLines = function parse_wrapCommentBlock_emptyLines() {\r\n                if ((/^\\s+$/).test(lines[b + 1]) === true || lines[b + 1] === \"\") {\r\n                    do {\r\n                        b = b + 1;\r\n                    } while (b < len && ((/^\\s+$/).test(lines[b + 1]) === true || lines[b + 1] === \"\"));\r\n                }\r\n                if (b < len - 1) {\r\n                    second.push(\"\");\r\n                }\r\n            };\r\n            do {\r\n                build.push(config.chars[a]);\r\n                if (config.chars[a] === \"\\n\") {\r\n                    parse.lineNumber = parse.lineNumber + 1;\r\n                }\r\n                if (config.chars[a] === term && config.chars.slice(a - terml, a + 1).join(\"\") === config.terminator) {\r\n                    break;\r\n                }\r\n                a = a + 1;\r\n            } while (a < config.end);\r\n            output = build.join(\"\");\r\n            if (regIgnore.test(output) === true) {\r\n                let termination = \"\\n\";\r\n                a = a + 1;\r\n                do {\r\n                    build.push(config.chars[a]);\r\n                    a = a + 1;\r\n                } while (a < config.end && (config.chars[a - 1] !== \"d\" || (config.chars[a - 1] === \"d\" && build.slice(build.length - 16).join(\"\") !== \"parse-ignore-end\")));\r\n                b = a;\r\n                terml = config.opening.length - 1;\r\n                term = config.opening.charAt(terml);\r\n                do {\r\n                    if (config.opening === \"/*\" && config.chars[b - 1] === \"/\" && (config.chars[b] === \"*\" || config.chars[b] === \"/\")) {\r\n                        break; // for script\r\n                    }\r\n                    if (config.opening !== \"/*\" && config.chars[b] === term && config.chars.slice(b - terml, b + 1).join(\"\") === config.opening) {\r\n                        break; // for markup\r\n                    }\r\n                    b = b - 1;\r\n                } while (b > config.start);\r\n                if (config.opening === \"/*\" && config.chars[b] === \"*\") {\r\n                    termination = \"\\u002a/\";\r\n                }\r\n                else if (config.opening !== \"/*\") {\r\n                    termination = config.terminator;\r\n                }\r\n                terml = termination.length - 1;\r\n                term = termination.charAt(terml);\r\n                if (termination !== \"\\n\" || config.chars[a] !== \"\\n\") {\r\n                    do {\r\n                        build.push(config.chars[a]);\r\n                        if (termination === \"\\n\" && config.chars[a + 1] === \"\\n\") {\r\n                            break;\r\n                        }\r\n                        if (config.chars[a] === term && config.chars.slice(a - terml, a + 1).join(\"\") === termination) {\r\n                            break;\r\n                        }\r\n                        a = a + 1;\r\n                    } while (a < config.end);\r\n                }\r\n                if (config.chars[a] === \"\\n\") {\r\n                    a = a - 1;\r\n                }\r\n                output = build.join(\"\").replace(/\\s+$/, \"\");\r\n                return [output, a];\r\n            }\r\n            if (a === config.end || wrap < 1 || (output.length <= wrap && output.indexOf(\"\\n\") < 0) || sparser.options.preserve_comment === true || (config.opening === \"/*\" && output.indexOf(\"\\n\") > 0 && output.replace(\"\\n\", \"\").indexOf(\"\\n\") > 0 && (/\\n(?!(\\s*\\*))/).test(output) === false)) {\r\n                return [output, a];\r\n            }\r\n            b = config.start;\r\n            if (b > 0 && config.chars[b - 1] !== \"\\n\" && (/\\s/).test(config.chars[b - 1]) === true) {\r\n                do {\r\n                    b = b - 1;\r\n                } while (b > 0 && config.chars[b - 1] !== \"\\n\" && (/\\s/).test(config.chars[b - 1]) === true);\r\n            }\r\n            space = config.chars.slice(b, config.start).join(\"\");\r\n            spaceLine = new RegExp(`\\n${space}`, \"g\");\r\n            lines = output.replace(/\\r\\n/g, \"\\n\").replace(spaceLine, \"\\n\").split(\"\\n\");\r\n            len = lines.length;\r\n            lines[0] = lines[0].replace(regStart, \"\");\r\n            lines[len - 1] = lines[len - 1].replace(regEnd, \"\");\r\n            if (len < 2) {\r\n                lines = lines[0].split(\" \");\r\n            }\r\n            if (lines[0] === \"\") {\r\n                lines[0] = config.opening;\r\n            }\r\n            else {\r\n                lines.splice(0, 0, config.opening);\r\n            }\r\n            len = lines.length;\r\n            b = 0;\r\n            do {\r\n                bline = (b < len - 1)\r\n                    ? lines[b + 1].replace(/^\\s+/, \"\")\r\n                    : \"\";\r\n                if ((/^\\s+$/).test(lines[b]) === true || lines[b] === \"\") {\r\n                    emptyLines();\r\n                }\r\n                else if (lines[b].slice(0, 4) === \"    \") {\r\n                    second.push(lines[b]);\r\n                }\r\n                else if (lines[b].replace(/^\\s+/, \"\").length > wrap && lines[b].replace(/^\\s+/, \"\").indexOf(\" \") > wrap) {\r\n                    lines[b] = lines[b].replace(/^\\s+/, \"\");\r\n                    c = lines[b].indexOf(\" \");\r\n                    second.push(lines[b].slice(0, c));\r\n                    lines[b] = lines[b].slice(c + 1);\r\n                    b = b - 1;\r\n                }\r\n                else {\r\n                    if (config.opening === \"/*\" && lines[b].indexOf(\"/*\") !== 0) {\r\n                        lines[b] = `   ${lines[b].replace(/^\\s+/, \"\").replace(/\\s+$/, \"\").replace(/\\s+/g, \" \")}`;\r\n                    }\r\n                    else {\r\n                        lines[b] = `${lines[b].replace(/^\\s+/, \"\").replace(/\\s+$/, \"\").replace(/\\s+/g, \" \")}`;\r\n                    }\r\n                    twrap = (b < 1)\r\n                        ? wrap - (config.opening.length + 1)\r\n                        : wrap;\r\n                    c = lines[b].length;\r\n                    d = lines[b].replace(/^\\s+/, \"\").indexOf(\" \");\r\n                    if (c > twrap && d > 0 && d < twrap) {\r\n                        c = twrap;\r\n                        do {\r\n                            c = c - 1;\r\n                            if ((/\\s/).test(lines[b].charAt(c)) === true && c <= wrap) {\r\n                                break;\r\n                            }\r\n                        } while (c > 0);\r\n                        if (lines[b].slice(0, 4) !== \"    \" && (/^\\s*(\\*|-)\\s/).test(lines[b]) === true && (/^\\s*(\\*|-)\\s/).test(lines[b + 1]) === false) {\r\n                            lines.splice(b + 1, 0, \"* \");\r\n                        }\r\n                        if (lines[b].slice(0, 4) !== \"    \" && (/^\\s*\\d+\\.\\s/).test(lines[b]) === true && (/^\\s*\\d+\\.\\s/).test(lines[b + 1]) === false) {\r\n                            lines.splice(b + 1, 0, \"1. \");\r\n                        }\r\n                        if (c < 4) {\r\n                            second.push(lines[b]);\r\n                            bigLine = true;\r\n                        }\r\n                        else if (b === len - 1) {\r\n                            second.push(lines[b].slice(0, c));\r\n                            lines[b] = lines[b].slice(c + 1);\r\n                            bigLine = true;\r\n                            b = b - 1;\r\n                        }\r\n                        else if ((/^\\s+$/).test(lines[b + 1]) === true || lines[b + 1] === \"\") {\r\n                            second.push(lines[b].slice(0, c));\r\n                            lines[b] = lines[b].slice(c + 1);\r\n                            emptyLine = true;\r\n                            b = b - 1;\r\n                        }\r\n                        else if (lines[b + 1].slice(0, 4) !== \"    \" && (/^\\s*(\\*|-)\\s/).test(lines[b + 1]) === true) {\r\n                            second.push(lines[b].slice(0, c));\r\n                            lines[b] = lines[b].slice(c + 1);\r\n                            bulletLine = true;\r\n                            b = b - 1;\r\n                        }\r\n                        else if (lines[b + 1].slice(0, 4) !== \"    \" && (/^\\s*\\d+\\.\\s/).test(lines[b + 1]) === true) {\r\n                            second.push(lines[b].slice(0, c));\r\n                            lines[b] = lines[b].slice(c + 1);\r\n                            numberLine = true;\r\n                            b = b - 1;\r\n                        }\r\n                        else if (lines[b + 1].slice(0, 4) === \"    \") {\r\n                            second.push(lines[b].slice(0, c));\r\n                            lines[b] = lines[b].slice(c + 1);\r\n                            bigLine = true;\r\n                            b = b - 1;\r\n                        }\r\n                        else if (c + bline.length > wrap && bline.indexOf(\" \") < 0) {\r\n                            second.push(lines[b].slice(0, c));\r\n                            lines[b] = lines[b].slice(c + 1);\r\n                            bigLine = true;\r\n                            b = b - 1;\r\n                        }\r\n                        else if (lines[b].replace(/^\\s+/, \"\").indexOf(\" \") < wrap) {\r\n                            if (lines[b].length > wrap) {\r\n                                lines[b + 1] = lines[b].slice(c + 1) + lf + lines[b + 1];\r\n                            }\r\n                            else {\r\n                                lines[b + 1] = `${lines[b].slice(c + 1)} ${lines[b + 1]}`;\r\n                            }\r\n                        }\r\n                        if (emptyLine === false && bulletLine === false && numberLine === false && bigLine === false) {\r\n                            lines[b] = lines[b].slice(0, c);\r\n                        }\r\n                    }\r\n                    else if (lines[b + 1] !== undefined && ((lines[b].length + bline.indexOf(\" \") > wrap && bline.indexOf(\" \") > 0) || (lines[b].length + bline.length > wrap && bline.indexOf(\" \") < 0))) {\r\n                        second.push(lines[b]);\r\n                        b = b + 1;\r\n                    }\r\n                    else if (lines[b + 1] !== undefined && (/^\\s+$/).test(lines[b + 1]) === false && lines[b + 1] !== \"\" && lines[b + 1].slice(0, 4) !== \"    \" && (/^\\s*(\\*|-|(\\d+\\.))\\s/).test(lines[b + 1]) === false) {\r\n                        lines[b + 1] = `${lines[b]} ${lines[b + 1]}`;\r\n                        emptyLine = true;\r\n                    }\r\n                    if (bigLine === false && bulletLine === false && numberLine === false) {\r\n                        if (emptyLine === true) {\r\n                            emptyLine = false;\r\n                        }\r\n                        else if ((/^\\s*(\\*|-|(\\d+\\.))\\s*$/).test(lines[b]) === false) {\r\n                            if (b < len - 1 && lines[b + 1] !== \"\" && (/^\\s+$/).test(lines[b]) === false && lines[b + 1].slice(0, 4) !== \"    \" && (/^\\s*(\\*|-|(\\d+\\.))\\s/).test(lines[b + 1]) === false) {\r\n                                lines[b] = `${lines[b]} ${lines[b + 1]}`;\r\n                                lines.splice(b + 1, 1);\r\n                                len = len - 1;\r\n                                b = b - 1;\r\n                            }\r\n                            else {\r\n                                if (config.opening === \"/*\" && lines[b].indexOf(\"/*\") !== 0) {\r\n                                    second.push(`   ${lines[b].replace(/^\\s+/, \"\").replace(/\\s+$/, \"\").replace(/\\s+/g, \" \")}`);\r\n                                }\r\n                                else {\r\n                                    second.push(`${lines[b].replace(/^\\s+/, \"\").replace(/\\s+$/, \"\").replace(/\\s+/g, \" \")}`);\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                    bigLine = false;\r\n                    bulletLine = false;\r\n                    numberLine = false;\r\n                }\r\n                b = b + 1;\r\n            } while (b < len);\r\n            if (second.length > 0) {\r\n                if (second[second.length - 1].length > wrap - (config.terminator.length + 1)) {\r\n                    second.push(config.terminator);\r\n                }\r\n                else {\r\n                    second[second.length - 1] = `${second[second.length - 1]} ${config.terminator}`;\r\n                }\r\n                output = second.join(lf);\r\n            }\r\n            else {\r\n                lines[lines.length - 1] = lines[lines.length - 1] + config.terminator;\r\n                output = lines.join(lf);\r\n            }\r\n            return [output, a];\r\n        },\r\n        // parsing line comments and simultaneously applying word wrap\r\n        wrapCommentLine: function parse_wrapCommentLine(config) {\r\n            let a = config.start, b = 0, output = \"\", build = [];\r\n            const wrap = sparser.options.wrap, recurse = function parse_wrapCommentLine_recurse() {\r\n                let line = \"\";\r\n                do {\r\n                    b = b + 1;\r\n                    if (config.chars[b + 1] === \"\\n\") {\r\n                        return;\r\n                    }\r\n                } while (b < config.end && (/\\s/).test(config.chars[b]) === true);\r\n                if (config.chars[b] + config.chars[b + 1] === \"//\") {\r\n                    build = [];\r\n                    do {\r\n                        build.push(config.chars[b]);\r\n                        b = b + 1;\r\n                    } while (b < config.end && config.chars[b] !== \"\\n\");\r\n                    line = build.join(\"\");\r\n                    if ((/^\\/\\/ (\\*|-|(\\d+\\.))/).test(line) === false && line.slice(0, 6) !== \"//    \" && (/^\\/\\/\\s*$/).test(line) === false) {\r\n                        output = `${output} ${line.replace(/(^\\/\\/\\s*)/, \"\").replace(/\\s+$/, \"\")}`;\r\n                        a = b - 1;\r\n                        parse_wrapCommentLine_recurse();\r\n                    }\r\n                }\r\n            }, wordWrap = function parse_wrapCommentLine_wordWrap() {\r\n                let c = 0, d = 0;\r\n                const lines = [], record = (parse.count > -1)\r\n                    ? {\r\n                        begin: parse.structure[parse.structure.length - 1][1],\r\n                        ender: -1,\r\n                        lexer: config.lexer,\r\n                        lines: parse.linesSpace,\r\n                        stack: parse.structure[parse.structure.length - 1][0],\r\n                        token: parse.data.token[parse.count],\r\n                        types: \"comment\"\r\n                    }\r\n                    : {\r\n                        begin: -1,\r\n                        ender: -1,\r\n                        lexer: config.lexer,\r\n                        lines: parse.linesSpace,\r\n                        stack: \"global\",\r\n                        token: \"\",\r\n                        types: \"comment\"\r\n                    };\r\n                output = output.replace(/\\s+/g, \" \").replace(/\\s+$/, \"\");\r\n                d = output.length;\r\n                if (wrap > d) {\r\n                    return;\r\n                }\r\n                do {\r\n                    c = wrap;\r\n                    if (output.charAt(c) !== \" \") {\r\n                        do {\r\n                            c = c - 1;\r\n                        } while (c > 0 && output.charAt(c) !== \" \");\r\n                        if (c < 3) {\r\n                            c = wrap;\r\n                            do {\r\n                                c = c + 1;\r\n                            } while (c < d - 1 && output.charAt(c) !== \" \");\r\n                        }\r\n                    }\r\n                    lines.push(output.slice(0, c));\r\n                    output = `// ${output.slice(c).replace(/^\\s+/, \"\")}`;\r\n                    d = output.length;\r\n                } while (wrap < d);\r\n                c = 0;\r\n                d = lines.length;\r\n                do {\r\n                    record.token = lines[c];\r\n                    parse.push(parse.data, record, \"\");\r\n                    record.lines = 2;\r\n                    parse.linesSpace = 2;\r\n                    c = c + 1;\r\n                } while (c < d);\r\n            };\r\n            do {\r\n                build.push(config.chars[a]);\r\n                a = a + 1;\r\n            } while (a < config.end && config.chars[a] !== \"\\n\");\r\n            if (a === config.end) {\r\n                // necessary because the wrapping logic expects line termination\r\n                config.chars.push(\"\\n\");\r\n            }\r\n            else {\r\n                a = a - 1;\r\n            }\r\n            output = build.join(\"\").replace(/\\s+$/, \"\");\r\n            if ((/^(\\/\\/\\s*parse-ignore\\u002dstart)/).test(output) === true) {\r\n                let termination = \"\\n\";\r\n                a = a + 1;\r\n                do {\r\n                    build.push(config.chars[a]);\r\n                    a = a + 1;\r\n                } while (a < config.end && (config.chars[a - 1] !== \"d\" || (config.chars[a - 1] === \"d\" && build.slice(build.length - 16).join(\"\") !== \"parse-ignore-end\")));\r\n                b = a;\r\n                do {\r\n                    b - b - 1;\r\n                } while (b > config.start && config.chars[b - 1] === \"/\" && (config.chars[b] === \"*\" || config.chars[b] === \"/\"));\r\n                if (config.chars[b] === \"*\") {\r\n                    termination = \"\\u002a/\";\r\n                }\r\n                if (termination !== \"\\n\" || config.chars[a] !== \"\\n\") {\r\n                    do {\r\n                        build.push(config.chars[a]);\r\n                        if (termination === \"\\n\" && config.chars[a + 1] === \"\\n\") {\r\n                            break;\r\n                        }\r\n                        a = a + 1;\r\n                    } while (a < config.end && (termination === \"\\n\" || (termination === \"\\u002a/\" && (config.chars[a - 1] !== \"*\" || config.chars[a] !== \"/\"))));\r\n                }\r\n                if (config.chars[a] === \"\\n\") {\r\n                    a = a - 1;\r\n                }\r\n                output = build.join(\"\").replace(/\\s+$/, \"\");\r\n                return [output, a];\r\n            }\r\n            if (output === \"//\" || output.slice(0, 6) === \"//    \" || sparser.options.preserve_comment === true) {\r\n                return [output, a];\r\n            }\r\n            output = output.replace(/(\\/\\/\\s*)/, \"// \");\r\n            if (wrap < 1 || (a === config.end - 1 && parse.data.begin[parse.count] < 1)) {\r\n                return [output, a];\r\n            }\r\n            b = a + 1;\r\n            recurse();\r\n            wordWrap();\r\n            return [output, a];\r\n        }\r\n    }, sparser = {\r\n        lexers: {},\r\n        libs: {},\r\n        options:{\"lexer_options\":{\"markup\":{\"attribute_sort\":false,\"attribute_sort_list\":\"\",\"parse_space\":false,\"preserve_text\":false,\"quote_convert\":\"none\",\"tag_merge\":false,\"tag_sort\":false,\"unformatted\":false},\"script\":{\"end_comma\":\"none\",\"object_sort\":false,\"quote_convert\":\"none\",\"variable_list\":\"none\"},\"style\":{\"no_lead_zero\":false,\"object_sort\":false,\"quote_convert\":\"none\"}},\"correct\":false,\"crlf\":false,\"format\":\"arrays\",\"language\":\"auto\",\"lexer\":\"auto\",\"preserve_comment\":false,\"source\":\"\",\"wrap\":0},\r\n        parse: parse,\r\n        parser: parser,\r\n        parseerror: \"\",\r\n        version:{date:\"18 Aug 2019\",number:\"1.4.12\"}\r\n    };\r\n    (function options_init() {\r\n    \r\n    const optionDef = {\r\n        attribute_sort: {\r\n            default: false,\r\n            definition: \"Alphanumerically sort markup attributes. Sorting is ignored if a given tag contains an attribute with instructions for a different language such as a template scheme, child markup tag, or start of a code structure.\",\r\n            label: \"Sort Attributes\",\r\n            lexer: [\"markup\"],\r\n            type: \"boolean\"\r\n        },\r\n        attribute_sort_list: {\r\n            default: \"\",\r\n            definition: \"A comma separated list of attribute names. Attributes will be sorted according to this list and then alphanumerically. This option requires 'attribute_sort' have a value of true.\",\r\n            label: \"Sort Attribute List\",\r\n            lexer: [\"markup\"],\r\n            type: \"string\"\r\n        },\r\n        correct: {\r\n            default: false,\r\n            definition: \"Automatically correct sloppiness in code. If false missing syntax will be included starting with 'x', such as 'x;' for missing simicolons.\",\r\n            label: \"Correct\",\r\n            lexer: [\"all\"],\r\n            type: \"boolean\"\r\n        },\r\n        crlf: {\r\n            default: false,\r\n            definition: \"If line termination should be crlf (Windows) otherwise line termination is lf (Unix).\",\r\n            label: \"CRLF\",\r\n            lexer: [\"all\"],\r\n            type: \"boolean\"\r\n        },\r\n        end_comma: {\r\n            default: \"none\",\r\n            definition: \"Whether terminal commas in objects and arrays should be added or eliminated.\",\r\n            label: \"End Comma\",\r\n            lexer: [\"script\"],\r\n            type: \"string\",\r\n            values: {\r\n                \"always\": \"Adds terminal commas if they are missing.\",\r\n                \"never\": \"Removes terminal commas if they are present.\",\r\n                \"none\": \"Ignores this option.\"\r\n            }\r\n        },\r\n        format: {\r\n            default: \"arrays\",\r\n            definition: \"Defines the output format of the parser.\",\r\n            label: \"Output Format\",\r\n            lexer: [\"all\"],\r\n            type: \"string\",\r\n            values: {\r\n                \"arrays\": \"The output format is an object of arrays such that the same index of all the arrays represents one data record, for example: {begin:[],ender:[],lexer:[],lines[],stack:[],token:[],types:[]}.\",\r\n                \"csv\": \"The output format is comma separated value format.\",\r\n                \"markdown\": \"Generates the output in a markdown table.\",\r\n                \"minimal\": \"The output format is an array of arrays which is structurally similar to the objects format but without key names, for example: [[-1,-1,\\\"script\\\",0,\\\"global\\\",\\\"const\\\",\\\"word\\\"]].\",\r\n                \"objects\": \"The output format is an array of objects such that each array index is one data record, for example: [{begin:-1,ender:-1,lexer:\\\"script\\\",lines:0,stack:\\\"global\\\",token:\\\"const\\\",types:\\\"word\\\"}].\"\r\n            }\r\n        },\r\n        language: {\r\n            default: \"auto\",\r\n            definition: \"The language to parse.  The value auto will result in language auto detection.\",\r\n            label: \"Language\",\r\n            lexer: [\"all\"],\r\n            type: \"string\"\r\n        },\r\n        lexer: {\r\n            default: \"auto\",\r\n            definition: \"The lexer used to perform the parsing.  The value auto will result in language auto detection.\",\r\n            label: \"Lexer\",\r\n            lexer: [\"all\"],\r\n            type: \"string\"\r\n        },\r\n        no_lead_zero: {\r\n            default: false,\r\n            definition: \"Whether the zero to the left of the decimal point should be removed from numbers between 0 and 1.\",\r\n            label: \"No Lead Zero\",\r\n            lexer: [\"style\"],\r\n            type: \"boolean\"\r\n        },\r\n        object_sort: {\r\n            default: false,\r\n            definition: \"Where style properties should be sorted by type and then alphabetically and whether script object properties should be sorted alphabetically.\",\r\n            label: \"Object Sort\",\r\n            lexer: [\"script\", \"style\"],\r\n            type: \"boolean\"\r\n        },\r\n        parse_space: {\r\n            default: false,\r\n            definition: \"Whether white space should be parsed as content tokens.\",\r\n            label: \"Parse Markup White Space\",\r\n            lexer: [\"markup\"],\r\n            type: \"boolean\"\r\n        },\r\n        preserve_comment: {\r\n            default: false,\r\n            definition: \"Whether comments should be ignored from manipulation, such as word wrap.\",\r\n            label: \"Preserve Comment\",\r\n            lexer: [\"all\"],\r\n            type: \"boolean\"\r\n        },\r\n        preserve_text: {\r\n            default: false,\r\n            definition: \"Whether text content should be preserved from manipulation, such as word wrap.\",\r\n            label: \"Preserve Text\",\r\n            lexer: [\"markup\"],\r\n            type: \"boolean\"\r\n        },\r\n        quote_convert: {\r\n            default: \"none\",\r\n            definition: \"If quote characters should be converted from single quotes to double quotes or the opposite. This option does take into account escaped quote characters.\",\r\n            label: \"Quote Convert\",\r\n            lexer: [\"markup\", \"script\", \"style\"],\r\n            type: \"string\",\r\n            values: {\r\n                \"double\": \"Converts single quote characters to double quote characters.\",\r\n                \"none\": \"Ignores this option.\",\r\n                \"single\": \"Converts double quote characters to single quote characters.\"\r\n            }\r\n        },\r\n        source: {\r\n            default: \"\",\r\n            definition: \"The source code to parse.\",\r\n            label: \"Source\",\r\n            lexer: [\"all\"],\r\n            type: \"string\"\r\n        },\r\n        tag_merge: {\r\n            default: false,\r\n            definition: \"If adjacent start and end tags in markup should be merged into one singleton tag.\",\r\n            label: \"Tag Merge\",\r\n            lexer: [\"markup\"],\r\n            type: \"boolean\"\r\n        },\r\n        tag_sort: {\r\n            default: false,\r\n            definition: \"Whether markup tags should be alphabetically sorted amonst their siblings.\",\r\n            label: \"Tag Sort\",\r\n            lexer: [\"markup\"],\r\n            type: \"boolean\"\r\n        },\r\n        unformatted: {\r\n            default: false,\r\n            definition: \"If tags in markup code should be preserved from any manner of alteration.\",\r\n            label: \"Tag Unformatted\",\r\n            lexer: [\"markup\"],\r\n            type: \"boolean\"\r\n        },\r\n        variable_list: {\r\n            default: \"none\",\r\n            definition: \"Whether consecutive variable declarations should be separate statements or a comma separated list. Use of this option respects the different types of declarations: var, const, let.\",\r\n            label: \"Variable List\",\r\n            lexer: [\"script\"],\r\n            type: \"string\",\r\n            values: {\r\n                \"each\": \"Separates variable declarations into separate statements.\",\r\n                \"list\": \"Combines consecutive variable declaration statements into a single comma separated list.\",\r\n                \"none\": \"Ignores this option.\"\r\n            }\r\n        },\r\n        wrap: {\r\n            default: 0,\r\n            definition: \"The character distance in which to apply word wrap. A value of less than 1 eliminates word wrap.\",\r\n            label: \"Wrap\",\r\n            lexer: [\"all\"],\r\n            type: \"number\"\r\n        }\r\n    };\r\n    sparser.libs.optionDef = optionDef;\r\n}());\r\n(function language_init() {\r\n    \r\n    const language = {\r\n        setlexer: function language_setlexer(input) {\r\n            const langmap = {\r\n                c_cpp: \"script\",\r\n                coldfusion: \"markup\",\r\n                csharp: \"script\",\r\n                css: \"style\",\r\n                csv: \"csv\",\r\n                dustjs: \"markup\",\r\n                ejs: \"markup\",\r\n                go: \"markup\",\r\n                handlebars: \"markup\",\r\n                html: \"markup\",\r\n                html_ruby: \"markup\",\r\n                java: \"script\",\r\n                javascript: \"script\",\r\n                json: \"script\",\r\n                jsp: \"markup\",\r\n                jsx: \"script\",\r\n                less: \"style\",\r\n                markdown: \"markdown\",\r\n                markup: \"markup\",\r\n                php: \"script\",\r\n                phphtml: \"markup\",\r\n                qml: \"style\",\r\n                scss: \"style\",\r\n                silverstripe: \"markup\",\r\n                \"styled-jsx\": \"script\",\r\n                \"styled-components\": \"script\",\r\n                swig: \"markup\",\r\n                text: \"text\",\r\n                titanium: \"script\",\r\n                tss: \"script\",\r\n                twig: \"markup\",\r\n                typescript: \"script\",\r\n                vapor: \"markup\",\r\n                velocity: \"markup\",\r\n                xhtml: \"markup\",\r\n                xml: \"markup\"\r\n            };\r\n            if (typeof input !== \"string\") {\r\n                return \"script\";\r\n            }\r\n            if (input.indexOf(\"html\") > -1) {\r\n                return \"markup\";\r\n            }\r\n            if (langmap[input] === undefined) {\r\n                return \"script\";\r\n            }\r\n            return langmap[input];\r\n        },\r\n        nameproper: function language_nameproper(input) {\r\n            const langmap = {\r\n                c_cpp: \"C++ (Not yet supported)\",\r\n                coldfusion: \"ColdFusion\",\r\n                csharp: \"C#\",\r\n                dustjs: \"Dust.js\",\r\n                ejs: \"EJS Template\",\r\n                elm: \"Elm Template\",\r\n                go: \"Go Lang Template\",\r\n                handlebars: \"Handlebars Template\",\r\n                html_ruby: \"ERB (Ruby) Template\",\r\n                java: \"Java\",\r\n                javascript: \"JavaScript\",\r\n                jsp: \"JSTL (JSP)\",\r\n                jsx: \"React JSX\",\r\n                liquid: \"Liquid Template\",\r\n                markdown: \"markdown\",\r\n                markup: \"markup\",\r\n                phphtml: \"HTML/PHP\",\r\n                scss: \"SCSS\",\r\n                silverstripe: \"SilverStripe\",\r\n                text: \"Plain Text\",\r\n                titanium: \"Titanium Stylesheets\",\r\n                tss: \"Titanium Stylesheets\",\r\n                twig: \"HTML TWIG Template\",\r\n                typescript: \"TypeScript\",\r\n                vapor: \"Vapor Leaf\",\r\n                velocity: \"Apache Velocity\",\r\n                volt: \"Volt Template\"\r\n            };\r\n            if (typeof input !== \"string\" || langmap[input] === undefined) {\r\n                return input.toUpperCase();\r\n            }\r\n            return langmap[input];\r\n        },\r\n        // * [0] = language value\r\n        // * [1] = lexer value\r\n        // * [2] = pretty formatting for text output to user\r\n        auto: function language_auto(sample, defaultLang) {\r\n            let b = [], c = 0;\r\n            const vartest = ((/(((var)|(let)|(const)|(function)|(import))\\s+(\\w|\\$)+[a-zA-Z0-9]*)/).test(sample) === true && (/@import/).test(sample) === false), finalstatic = (/((((final)|(public)|(private))\\s+static)|(static\\s+void))/).test(sample), output = function language_auto_output(langname) {\r\n                if (langname === \"unknown\") {\r\n                    return [defaultLang, language.setlexer(defaultLang), \"unknown\"];\r\n                }\r\n                if (langname === \"xhtml\" || langname === \"markup\") {\r\n                    return [\"xml\", language.setlexer(\"xml\"), \"XHTML\"];\r\n                }\r\n                if (langname === \"tss\") {\r\n                    return [\"tss\", language.setlexer(\"tss\"), \"Titanium Stylesheets\"];\r\n                }\r\n                if (langname === \"phphtml\") {\r\n                    return [\"php\", language.setlexer(langname), language.nameproper(langname)];\r\n                }\r\n                return [langname, language.setlexer(langname), language.nameproper(langname)];\r\n            }, cssA = function language_auto_cssA() {\r\n                if ((/\\n\\s*#+\\s+/).test(sample) === true || (/^#+\\s+/).test(sample) === true) {\r\n                    return output(\"markdown\");\r\n                }\r\n                if ((/\\$[a-zA-Z]/).test(sample) === true || (/\\{\\s*(\\w|\\.|\\$|#)+\\s*\\{/).test(sample) === true) {\r\n                    return output(\"scss\");\r\n                }\r\n                if ((/@[a-zA-Z]/).test(sample) === true || (/\\{\\s*(\\w|\\.|@|#)+\\s*\\{/).test(sample) === true) {\r\n                    return output(\"less\");\r\n                }\r\n                return output(\"css\");\r\n            }, notmarkup = function language_auto_notmarkup() {\r\n                let d = 1, join = \"\", flaga = false, flagb = false;\r\n                const publicprivate = (/((public)|(private))\\s+(static\\s+)?(((v|V)oid)|(class)|(final))/).test(sample), javascriptA = function language_auto_notmarkup_javascriptA() {\r\n                    if (sample.indexOf(\"(\") > -1 || sample.indexOf(\"=\") > -1 || (sample.indexOf(\";\") > -1 && sample.indexOf(\"{\") > -1)) {\r\n                        if (vartest === false && ((/\\n\\s+#region\\s/).test(sample) === true || (/\\[\\w+:/).test(sample) === true)) {\r\n                            return output(\"csharp\");\r\n                        }\r\n                        if (finalstatic === true || (/\\w<\\w+(,\\s+\\w+)*>/).test(sample) === true) {\r\n                            if ((/:\\s*((number)|(string))/).test(sample) === false && (finalstatic === true || publicprivate === true)) {\r\n                                return output(\"java\");\r\n                            }\r\n                            return output(\"typescript\");\r\n                        }\r\n                        if ((/final\\s+static/).test(sample) === true) {\r\n                            return output(\"java\");\r\n                        }\r\n                        if ((/<\\/\\w+>/).test(sample) === true && (/<\\w+((\\s+\\w)|>)/).test(sample) === true) {\r\n                            return output(\"jsx\");\r\n                        }\r\n                        if ((/((var)|(let)|(const))\\s+\\w+\\s*:/).test(sample) === true || (/=\\s*<\\w+/).test(sample) === true) {\r\n                            return output(\"typescript\");\r\n                        }\r\n                        return output(\"javascript\");\r\n                    }\r\n                    return output(\"unknown\");\r\n                }, cssOrJavaScript = function language_auto_notmarkup_cssOrJavaScript() {\r\n                    if ((/:\\s*((number)|(string))/).test(sample) === true && (/((public)|(private))\\s+/).test(sample) === true) {\r\n                        return output(\"typescript\");\r\n                    }\r\n                    if ((/import\\s+java(\\.|(fx))/).test(sample) === true || (/((public)|(private))\\s+static\\s+/).test(sample) === true) {\r\n                        return output(\"java\");\r\n                    }\r\n                    if ((/\\sclass\\s+\\w/).test(sample) === false && (/<[a-zA-Z]/).test(sample) === true && (/<\\/[a-zA-Z]/).test(sample) === true && ((/\\s?\\{%/).test(sample) === true || (/\\{(\\{|#)(?!(\\{|#|=))/).test(sample) === true)) {\r\n                        return output(\"twig\");\r\n                    }\r\n                    if ((/^(\\s*(\\$|@))/).test(sample) === false && (/(\\};?\\s*)$/).test(sample) === true) {\r\n                        if ((/export\\s+default\\s+\\{/).test(sample) === true || (/(\\?|:)\\s*(\\{|\\[)/).test(sample) === true || (/(\\{|\\s|;)render\\s*\\(\\)\\s*\\{/).test(sample) === true || (/^(\\s*return;?\\s*\\{)/).test(sample) === true) {\r\n                            return output(\"javascript\");\r\n                        }\r\n                    }\r\n                    if ((/\\{\\{#/).test(sample) === true && (/\\{\\{\\//).test(sample) === true && (/<\\w/).test(sample) === true) {\r\n                        return output(\"handlebars\");\r\n                    }\r\n                    if ((/\\{\\s*(\\w|\\.|@|#)+\\s*\\{/).test(sample) === true) {\r\n                        return output(\"less\");\r\n                    }\r\n                    if ((/\\$(\\w|-)/).test(sample) === true) {\r\n                        return output(\"scss\");\r\n                    }\r\n                    if ((/(;|\\{|:)\\s*@\\w/).test(sample) === true) {\r\n                        return output(\"less\");\r\n                    }\r\n                    if ((/class\\s+\\w+\\s+\\{/).test(sample) === true) {\r\n                        return output(\"java\");\r\n                    }\r\n                    return output(\"css\");\r\n                };\r\n                if (d < c) {\r\n                    do {\r\n                        if (flaga === false) {\r\n                            if (b[d] === \"*\" && b[d - 1] === \"/\") {\r\n                                b[d - 1] = \"\";\r\n                                flaga = true;\r\n                            }\r\n                            else if (flagb === false && b[d] === \"f\" && d < c - 6 && b[d + 1] === \"i\" && b[d + 2] === \"l\" && b[d + 3] === \"t\" && b[d + 4] === \"e\" && b[d + 5] === \"r\" && b[d + 6] === \":\") {\r\n                                flagb = true;\r\n                            }\r\n                        }\r\n                        else if (flaga === true && b[d] === \"*\" && d !== c - 1 && b[d + 1] === \"/\") {\r\n                            flaga = false;\r\n                            b[d] = \"\";\r\n                            b[d + 1] = \"\";\r\n                        }\r\n                        else if (flagb === true && b[d] === \";\") {\r\n                            flagb = false;\r\n                            b[d] = \"\";\r\n                        }\r\n                        if (flaga === true || flagb === true) {\r\n                            b[d] = \"\";\r\n                        }\r\n                        d = d + 1;\r\n                    } while (d < c);\r\n                }\r\n                join = b.join(\"\");\r\n                if ((/\\s\\/\\//).test(sample) === false && (/\\/\\/\\s/).test(sample) === false && (/^(\\s*(\\{|\\[)(?!%))/).test(sample) === true && (/((\\]|\\})\\s*)$/).test(sample) && sample.indexOf(\",\") !== -1) {\r\n                    return output(\"json\");\r\n                }\r\n                if ((/((\\}?(\\(\\))?\\)*;?\\s*)|([a-z0-9](\"|')?\\)*);?(\\s*\\})*)$/i).test(sample) === true && (vartest === true || publicprivate === true || (/console\\.log\\(/).test(sample) === true || (/export\\s+default\\s+class\\s+/).test(sample) === true || (/document\\.get/).test(sample) === true || (/((=|(\\$\\())\\s*function)|(\\s*function\\s+(\\w*\\s+)?\\()/).test(sample) === true || sample.indexOf(\"{\") === -1 || (/^(\\s*if\\s+\\()/).test(sample) === true)) {\r\n                    return javascriptA();\r\n                }\r\n                // * u007b === {\r\n                // * u0024 === $\r\n                // * u002e === .\r\n                if (sample.indexOf(\"{\") > -1 && ((/^(\\s*[\\u007b\\u0024\\u002e#@a-z0-9])/i).test(sample) === true || (/^(\\s*\\/(\\*|\\/))/).test(sample) === true || (/^(\\s*\\*\\s*\\{)/).test(sample) === true) && (/^(\\s*if\\s*\\()/).test(sample) === false && (/=\\s*(\\{|\\[|\\()/).test(join) === false && (((/(\\+|-|=|\\?)=/).test(join) === false || (/\\/\\/\\s*=+/).test(join) === true) || ((/=+('|\")?\\)/).test(sample) === true && (/;\\s*base64/).test(sample) === true)) && (/function(\\s+\\w+)*\\s*\\(/).test(join) === false) {\r\n                    if ((/\\s*#((include)|(define)|(endif))\\s+/).test(sample)) {\r\n                        return output(\"c_cpp\");\r\n                    }\r\n                    return cssOrJavaScript();\r\n                }\r\n                if ((/\"\\s*:\\s*\\{/).test(sample) === true) {\r\n                    return output(\"tss\");\r\n                }\r\n                if (sample.indexOf(\"{%\") > -1) {\r\n                    return output(\"twig\");\r\n                }\r\n                return output(\"unknown\");\r\n            }, markup = function language_auto_markup() {\r\n                const html = function language_auto_markup_html() {\r\n                    if ((/<%\\s*\\}/).test(sample) === true) {\r\n                        return output(\"ejs\");\r\n                    }\r\n                    if ((/<%\\s+end_((if)|(with)|(loop)|(control)|(cached)|(uncached))/).test(sample) === true) {\r\n                        return output(\"silverstripe\");\r\n                    }\r\n                    if ((/<%\\s*end/).test(sample) === true) {\r\n                        return output(\"html_ruby\");\r\n                    }\r\n                    if ((/\\{\\{(#|\\/|\\{)/).test(sample) === true) {\r\n                        return output(\"handlebars\");\r\n                    }\r\n                    if ((/\\{\\{end\\}\\}/).test(sample) === true) {\r\n                        //place holder for Go lang templates\r\n                        return output(\"html\");\r\n                    }\r\n                    if ((/\\s?\\{%/).test(sample) === true && (/\\{(\\{|#)(?!(\\{|#|=))/).test(sample) === true) {\r\n                        return output(\"twig\");\r\n                    }\r\n                    if ((/<\\?/).test(sample) === true) {\r\n                        if ((/^\\s*<\\?/).test(sample) === true && (/\\?>\\s*$/).test(sample) === true) {\r\n                            return output(\"php\");\r\n                        }\r\n                        return output(\"phphtml\");\r\n                    }\r\n                    if ((/<jsp:include\\s/).test(sample) === true || (/<c:((set)|(if))\\s/).test(sample) === true) {\r\n                        return output(\"jsp\");\r\n                    }\r\n                    if ((/\\{(#|\\?|\\^|@|<|\\+|~)/).test(sample) === true && (/\\{\\//).test(sample) === true && sample.indexOf(\"<![CDATA[\") < 0) {\r\n                        return output(\"dustjs\");\r\n                    }\r\n                    if ((/#((if)|(for)|(set))?\\(/).test(sample) === true) {\r\n                        return output(\"vapor\");\r\n                    }\r\n                    return output(\"html\");\r\n                };\r\n                if ((/<cfset\\s/i).test(sample) === true || (/<cfif\\s/i).test(sample) === true) {\r\n                    return output(\"coldfusion\");\r\n                }\r\n                if ((/^(\\s*<!doctype\\s+html>)/i).test(sample) === true ||\r\n                    (/^(\\s*<html)/i).test(sample) === true ||\r\n                    ((/<form\\s/i).test(sample) === true &&\r\n                        (/<label\\s/i).test(sample) === true &&\r\n                        (/<input\\s/i).test(sample) === true) ||\r\n                    (/<((img)|(IMG))(\\s+\\w+=(\"|')?\\S+(\"|')?)*\\s+src\\s*=/).test(sample) === true ||\r\n                    ((/^(\\s*<!DOCTYPE\\s+((html)|(HTML))\\s+PUBLIC\\s+)/).test(sample) === true &&\r\n                        (/XHTML\\s+1\\.1/).test(sample) === false &&\r\n                        (/XHTML\\s+1\\.0\\s+(S|s)((trict)|(TRICT))/).test(sample) === false)) {\r\n                    return html();\r\n                }\r\n                if ((/<jsp:include\\s/).test(sample) === true || (/<c:((set)|(if))\\s/).test(sample) === true) {\r\n                    return output(\"jsp\");\r\n                }\r\n                if ((/<%\\s*\\}/).test(sample) === true) {\r\n                    return output(\"ejs\");\r\n                }\r\n                if ((/<%\\s+end_((if)|(with)|(loop)|(control)|(cached)|(uncached))/).test(sample) === true) {\r\n                    return output(\"silverstripe\");\r\n                }\r\n                if ((/<%\\s*end/).test(sample) === true) {\r\n                    return output(\"html_ruby\");\r\n                }\r\n                if ((/\\{\\{(#|\\/|\\{)/).test(sample) === true) {\r\n                    return output(\"handlebars\");\r\n                }\r\n                if ((/\\{\\{end\\}\\}/).test(sample) === true) {\r\n                    //place holder for Go lang templates\r\n                    return output(\"xml\");\r\n                }\r\n                if ((/\\s?\\{%/).test(sample) === true && (/\\{\\{(?!(\\{|#|=))/).test(sample) === true) {\r\n                    return output(\"twig\");\r\n                }\r\n                if ((/<\\?(?!(xml))/).test(sample) === true) {\r\n                    if ((/^\\s*<\\?/).test(sample) === true && (/\\?>\\s*$/).test(sample) === true) {\r\n                        return output(\"php\");\r\n                    }\r\n                    return output(\"phphtml\");\r\n                }\r\n                if ((/\\{(#|\\?|\\^|@|<|\\+|~)/).test(sample) === true && (/\\{\\//).test(sample) === true) {\r\n                    return output(\"dustjs\");\r\n                }\r\n                if ((/<jsp:include\\s/).test(sample) === true || (/<c:((set)|(if))\\s/).test(sample) === true) {\r\n                    return output(\"jsp\");\r\n                }\r\n                if ((/#((if)|(for)|(set))?\\(/).test(sample) === true) {\r\n                    return output(\"vapor\");\r\n                }\r\n                return output(\"xml\");\r\n            };\r\n            if (sample === null || sample.replace(/\\s+/g, \"\") === \"\") {\r\n                return output(\"unknown\");\r\n            }\r\n            if (((/\\n\\s*#{1,6}\\s+/).test(sample) === true || ((/\\n\\s*(\\*|-|(\\d+\\.))\\s/).test(sample) === true) && (/\\/\\*/).test(sample) === false) &&\r\n                ((/\\[( |x|X)\\]/).test(sample) === true || (/\\s\\*\\*?\\S\\D/).test(sample) === true || (/\\n\\s*```/).test(sample) === true || ((/-+\\|(-+\\|)+/).test(sample) === true && (/<!--/).test(sample) === false))) {\r\n                return output(\"markdown\");\r\n            }\r\n            if ((/^(\\s*<!DOCTYPE\\s+html>)/i).test(sample) === true) {\r\n                return markup();\r\n            }\r\n            if ((/^\\s*@((charset)|(import)|(include)|(keyframes)|(media)|(namespace)|(page))/).test(sample) === true) {\r\n                return cssA();\r\n            }\r\n            if (finalstatic === false &&\r\n                (/=(>|=|-|\\+|\\*)/).test(sample) === false &&\r\n                (/^(\\s*((if)|(for)|(function))\\s*\\()/).test(sample) === false &&\r\n                (/(\\s|;|\\})((if)|(for)|(function\\s*\\w*))\\s*\\(/).test(sample) === false &&\r\n                vartest === false && (/return\\s*\\w*\\s*(;|\\})/).test(sample) === false &&\r\n                (sample === undefined ||\r\n                    (/^(\\s*#(?!(!\\/)))/).test(sample) === true ||\r\n                    ((/\\n\\s*(\\.|@)\\w+(\\(|(\\s*:))/).test(sample) === true && (/>\\s*<\\w/).test(sample) === false))) {\r\n                return cssA();\r\n            }\r\n            b = sample\r\n                .replace(/\\[[a-zA-Z][\\w-]*=(\"|')?[a-zA-Z][\\w-]*(\"|')?\\]/g, \"\")\r\n                .split(\"\");\r\n            c = b.length;\r\n            if ((/^(\\s*(\\{|<)(%|#|\\{))/).test(sample) === true) {\r\n                return markup();\r\n            }\r\n            if (((/^([\\s\\w-]*<)/).test(sample) === false && (/(>[\\s\\w-]*)$/).test(sample) === false) || finalstatic === true) {\r\n                return notmarkup();\r\n            }\r\n            if ((((/(>[\\w\\s:]*)?<(\\/|!|#)?[\\w\\s:\\-[]+/).test(sample) === true || ((/^\\s*</).test(sample) === true && (/<\\/\\w+(\\w|\\d)+>\\s*$/).test(sample) === true) || (/^(\\s*<\\?xml)/).test(sample) === true) && ((/^([\\s\\w]*<)/).test(sample) === true || (/(>[\\s\\w]*)$/).test(sample) === true)) || ((/^(\\s*<s((cript)|(tyle)))/i).test(sample) === true && (/(<\\/s((cript)|(tyle))>\\s*)$/i).test(sample) === true)) {\r\n                if ((/^([\\s\\w]*<)/).test(sample) === false || (/(>[\\s\\w]*)$/).test(sample) === false) {\r\n                    return notmarkup();\r\n                }\r\n                return markup();\r\n            }\r\n            return output(\"unknown\");\r\n        }\r\n    };\r\n    sparser.libs.language = language;\r\n}());\r\n(function style_init() {\r\n    \r\n    const style = function lexer_style(source) {\r\n        let a = 0, ltype = \"\", ltoke = \"\";\r\n        const parse = sparser.parse, data = parse.data, options = sparser.options, colors = [], colorNames = {\r\n            aliceblue: 0.9288006825347457,\r\n            antiquewhite: 0.8464695170775405,\r\n            aqua: 0.7874,\r\n            aquamarine: 0.8078549208338043,\r\n            azure: 0.9726526495416643,\r\n            beige: 0.8988459998705021,\r\n            bisque: 0.8073232737297876,\r\n            black: 0,\r\n            blanchedalmond: 0.8508443960815607,\r\n            blue: 0.0722,\r\n            blueviolet: 0.12622014321946043,\r\n            brown: 0.09822428787651079,\r\n            burlywood: 0.5155984453389335,\r\n            cadetblue: 0.29424681085422044,\r\n            chartreuse: 0.7603202590262282,\r\n            chocolate: 0.23898526114557292,\r\n            coral: 0.3701793087292368,\r\n            cornflowerblue: 0.30318641994179363,\r\n            cornsilk: 0.9356211037296492,\r\n            crimson: 0.16042199953025577,\r\n            cyan: 0.7874,\r\n            darkblue: 0.018640801980939217,\r\n            darkcyan: 0.2032931783904645,\r\n            darkgoldenrod: 0.27264703559992554,\r\n            darkgray: 0.39675523072562674,\r\n            darkgreen: 0.09114342904757505,\r\n            darkgrey: 0.39675523072562674,\r\n            darkkhaki: 0.45747326349994155,\r\n            darkmagenta: 0.07353047651207048,\r\n            darkolivegreen: 0.12651920884889156,\r\n            darkorange: 0.40016167026523863,\r\n            darkorchid: 0.1341314217485677,\r\n            darkred: 0.05488967453113126,\r\n            darksalmon: 0.4054147156338075,\r\n            darkseagreen: 0.43789249325969054,\r\n            darkslateblue: 0.06579284622798763,\r\n            darkslategray: 0.06760815192804355,\r\n            darkslategrey: 0.06760815192804355,\r\n            darkturquoise: 0.4874606277449034,\r\n            darkviolet: 0.10999048339343433,\r\n            deeppink: 0.2386689582827583,\r\n            deepskyblue: 0.444816033955754,\r\n            dimgray: 0.14126329114027164,\r\n            dimgrey: 0.14126329114027164,\r\n            dodgerblue: 0.2744253699145608,\r\n            firebrick: 0.10724525535015225,\r\n            floralwhite: 0.9592248482500424,\r\n            forestgreen: 0.18920812076002244,\r\n            fuchsia: 0.2848,\r\n            gainsboro: 0.7156935005064806,\r\n            ghostwhite: 0.9431126188632283,\r\n            gold: 0.6986087742815887,\r\n            goldenrod: 0.41919977809568404,\r\n            gray: 0.21586050011389915,\r\n            green: 0.15438342968146068,\r\n            greenyellow: 0.8060947261145331,\r\n            grey: 0.21586050011389915,\r\n            honeydew: 0.9633653555478173,\r\n            hotpink: 0.3465843816971475,\r\n            indianred: 0.21406134963884,\r\n            indigo: 0.031075614863369846,\r\n            ivory: 0.9907127060061531,\r\n            khaki: 0.7701234339412052,\r\n            lavendar: 0.8031875051452125,\r\n            lavendarblush: 0.9017274863104644,\r\n            lawngreen: 0.7390589312496334,\r\n            lemonchiffon: 0.9403899224562171,\r\n            lightblue: 0.6370914128080659,\r\n            lightcoral: 0.35522120733134843,\r\n            lightcyan: 0.9458729349482863,\r\n            lightgoldenrodyellow: 0.9334835101829635,\r\n            lightgray: 0.651405637419824,\r\n            lightgreen: 0.6909197995686475,\r\n            lightgrey: 0.651405637419824,\r\n            lightpink: 0.5856615273489745,\r\n            lightsalmon: 0.47806752252059587,\r\n            lightseagreen: 0.3505014511704197,\r\n            lightskyblue: 0.5619563761833096,\r\n            lightslategray: 0.23830165007286924,\r\n            lightslategrey: 0.23830165007286924,\r\n            lightyellow: 0.9816181839288161,\r\n            lime: 0.7152,\r\n            limegreen: 0.44571042246097864,\r\n            linen: 0.8835734098437936,\r\n            magenta: 0.2848,\r\n            maroon: 0.04589194232421496,\r\n            mediumaquamarine: 0.4938970331080111,\r\n            mediumblue: 0.04407778021232784,\r\n            mediumorchid: 0.21639251153773428,\r\n            mediumpurple: 0.22905858091648004,\r\n            mediumseagreen: 0.34393112338131226,\r\n            mediumslateblue: 0.20284629471622434,\r\n            mediumspringgreen: 0.7070430819418444,\r\n            mediumturquois: 0.5133827926447991,\r\n            mediumvioletred: 0.14371899849357186,\r\n            midnightblue: 0.020717866350860484,\r\n            mintcream: 0.9783460494758793,\r\n            mistyrose: 0.8218304785918541,\r\n            moccasin: 0.8008300099156694,\r\n            navajowhite: 0.7651968234278562,\r\n            navy: 0.015585128108223519,\r\n            oldlace: 0.9190063340554899,\r\n            olive: 0.20027537200567563,\r\n            olivedrab: 0.2259315095192918,\r\n            orange: 0.48170267036309605,\r\n            orangered: 0.2551624375341641,\r\n            orchid: 0.3134880676143873,\r\n            palegoldenrod: 0.7879264788761452,\r\n            palegreen: 0.7793675900635259,\r\n            paleturquoise: 0.764360779217138,\r\n            palevioletred: 0.2875499411788909,\r\n            papayawhip: 0.8779710019983541,\r\n            peachpuff: 0.7490558987825108,\r\n            peru: 0.3011307487793569,\r\n            pink: 0.6327107070246611,\r\n            plum: 0.4573422158796909,\r\n            powderblue: 0.6825458650060524,\r\n            purple: 0.061477070432438476,\r\n            red: 0.2126,\r\n            rosyblue: 0.3231945764940708,\r\n            royalblue: 0.16663210743188323,\r\n            saddlebrown: 0.09792228502052071,\r\n            salmon: 0.3697724152759545,\r\n            sandybrown: 0.46628543696283414,\r\n            seagreen: 0.1973419970627483,\r\n            seashell: 0.927378622069223,\r\n            sienna: 0.13697631337097677,\r\n            silver: 0.527115125705813,\r\n            skyblue: 0.5529166851818412,\r\n            slateblue: 0.14784278062136097,\r\n            slategray: 0.20896704076536138,\r\n            slategrey: 0.20896704076536138,\r\n            slightsteelblue: 0.5398388828466575,\r\n            snow: 0.9653334183484877,\r\n            springgreen: 0.7305230606852947,\r\n            steelblue: 0.20562642207624846,\r\n            tan: 0.48237604163921527,\r\n            teal: 0.1699685577896842,\r\n            thistle: 0.5681840109373312,\r\n            tomato: 0.3063861271941505,\r\n            turquoise: 0.5895536427577983,\r\n            violet: 0.40315452986676303,\r\n            wheat: 0.7490970282048214,\r\n            white: 1,\r\n            whitesmoke: 0.913098651793419,\r\n            yellow: 0.9278,\r\n            yellowgreen: 0.5076295720870697\r\n        }, b = source.split(\"\"), len = source.length, mapper = [], nosort = [], recordPush = function lexer_style_recordPush(structure) {\r\n            const record = {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"style\",\r\n                lines: parse.linesSpace,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: ltoke,\r\n                types: ltype\r\n            };\r\n            parse.push(data, record, structure);\r\n        }, esctest = function lexer_style_esctest(index) {\r\n            const slashy = index;\r\n            do {\r\n                index = index - 1;\r\n            } while (b[index] === \"\\\\\" && index > 0);\r\n            if ((slashy - index) % 2 === 1) {\r\n                return true;\r\n            }\r\n            return false;\r\n        }, \r\n        // Since I am already identifying value types this is a good place to do some\r\n        // quick analysis and clean up on certain value conditions. These things are\r\n        // being corrected:\r\n        // * fractional values missing a leading 0 are    provided a leading 0\r\n        // * 0 values with a dimension indicator    (px, em) have the dimension\r\n        // indicator    removed\r\n        // * eliminate unnecessary leading 0s\r\n        // * url values that are not quoted are wrapped    in double quote characters\r\n        // * color values are set to lowercase and    reduced from 6 to 3 digits if\r\n        // appropriate\r\n        value = function lexer_style_value(val) {\r\n            const x = val.replace(/\\s*!important/, \" !important\").split(\"\"), values = [], transition = (/-?transition$/).test(data.token[parse.count - 2]), colorPush = function lexer_style_value_colorPush(value) {\r\n                const vl = value.toLowerCase();\r\n                if ((/^(#[0-9a-f]{3,6})$/).test(vl) === true) {\r\n                    colors.push(value);\r\n                }\r\n                else if ((/^(rgba?\\()/).test(vl) === true) {\r\n                    colors.push(value);\r\n                }\r\n                else if (colorNames[vl] !== undefined) {\r\n                    colors.push(value);\r\n                }\r\n                return value;\r\n            }, valueSpace = function lexer_style_value_valueSpace(find) {\r\n                find = find.replace(/\\s*/g, \"\");\r\n                if ((/\\/\\d/).test(find) === true && val.indexOf(\"url(\") === 0) {\r\n                    return find;\r\n                }\r\n                return ` ${find.charAt(0)} ${find.charAt(1)}`;\r\n            }, zerofix = function lexer_style_value_zerofix(find) {\r\n                if (options.lexer_options.style.no_lead_zero === true) {\r\n                    const scrub = function lexer_style_value_zerofix_scrub(search) {\r\n                        return search.replace(/0+/, \"\");\r\n                    };\r\n                    return find.replace(/^-?\\D0+(\\.|\\d)/, scrub);\r\n                }\r\n                if ((/0*\\./).test(find) === true) {\r\n                    return find.replace(/0*\\./, \"0.\");\r\n                }\r\n                if ((/0+/).test((/\\d+/).exec(find)[0]) === true) {\r\n                    if ((/^\\D*0+\\D*$/).test(find) === true) {\r\n                        return find.replace(/0+/, \"0\");\r\n                    }\r\n                    return find.replace((/\\d+/).exec(find)[0], (/\\d+/).exec(find)[0].replace(/^0+/, \"\"));\r\n                }\r\n                return find;\r\n            }, commaspace = function lexer_style_value_commaspace(find) {\r\n                return find.replace(\",\", \", \");\r\n            }, diFix = function lexer_style_value_diFix(di) {\r\n                return `${di} `;\r\n            }, slash = function lexer_style_value_slash() {\r\n                const start = cc - 1;\r\n                let xx = start;\r\n                if (start < 1) {\r\n                    return true;\r\n                }\r\n                do {\r\n                    xx = xx - 1;\r\n                } while (xx > 0 && x[xx] === \"\\\\\");\r\n                // report true for odd numbers (escaped)\r\n                if ((start - xx) % 2 === 1) {\r\n                    return true;\r\n                }\r\n                return false;\r\n            }, zerodotstart = (/^-?0+\\.\\d+[a-z]/), dotstart = (/^-?\\.\\d+[a-z]/), zerodot = (/(\\s|\\(|,)-?0+\\.?\\d+([a-z]|\\)|,|\\s)/g), dot = (/(\\s|\\(|,)-?\\.?\\d+([a-z]|\\)|,|\\s)/g), dimensions = \"%|cap|ch|cm|deg|dpcm|dpi|dppx|em|ex|fr|grad|Hz|ic|in|kHz|lh|mm|ms|mS|pc|pt|px|Q|rad|rem|rlh|s|turn|vb|vh|vi|vmax|vmin|vw\";\r\n            let cc = 0, dd = 0, block = \"\", leng = x.length, items = [];\r\n            // this loop identifies containment so that tokens/sub-tokens are correctly\r\n            // taken\r\n            if (cc < leng) {\r\n                do {\r\n                    items.push(x[cc]);\r\n                    if (x[cc - 1] !== \"\\\\\" || slash() === false) {\r\n                        if (block === \"\") {\r\n                            if (x[cc] === \"\\\"\") {\r\n                                block = \"\\\"\";\r\n                                dd = dd + 1;\r\n                            }\r\n                            else if (x[cc] === \"'\") {\r\n                                block = \"'\";\r\n                                dd = dd + 1;\r\n                            }\r\n                            else if (x[cc] === \"(\") {\r\n                                block = \")\";\r\n                                dd = dd + 1;\r\n                            }\r\n                            else if (x[cc] === \"[\") {\r\n                                block = \"]\";\r\n                                dd = dd + 1;\r\n                            }\r\n                        }\r\n                        else if ((x[cc] === \"(\" && block === \")\") || (x[cc] === \"[\" && block === \"]\")) {\r\n                            dd = dd + 1;\r\n                        }\r\n                        else if (x[cc] === block) {\r\n                            dd = dd - 1;\r\n                            if (dd === 0) {\r\n                                block = \"\";\r\n                            }\r\n                        }\r\n                    }\r\n                    if (block === \"\" && x[cc] === \" \") {\r\n                        items.pop();\r\n                        values.push(colorPush(items.join(\"\")));\r\n                        items = [];\r\n                    }\r\n                    cc = cc + 1;\r\n                } while (cc < leng);\r\n            }\r\n            values.push(colorPush(items.join(\"\")));\r\n            leng = values.length;\r\n            //This is where the rules mentioned above are applied\r\n            cc = 0;\r\n            if (cc < leng) {\r\n                do {\r\n                    if (options.lexer_options.style.no_lead_zero === true && zerodotstart.test(values[cc]) === true) {\r\n                        values[cc] = values[cc].replace(/0+\\./, \".\");\r\n                    }\r\n                    else if ((options.lexer_options.style.no_lead_zero === false || options.lexer_options.style.no_lead_zero === undefined) && dotstart.test(values[cc]) === true) {\r\n                        values[cc] = values[cc].replace(\".\", \"0.\");\r\n                    }\r\n                    else if (zerodot.test(values[cc]) === true || dot.test(values[cc]) === true) {\r\n                        values[cc] = values[cc].replace(zerodot, zerofix).replace(dot, zerofix);\r\n                    }\r\n                    else if ((/^(0+([a-z]{2,3}|%))$/).test(values[cc]) === true && transition === false) {\r\n                        values[cc] = \"0\";\r\n                    }\r\n                    else if ((/^(0+)/).test(values[cc]) === true) {\r\n                        values[cc] = values[cc].replace(/0+/, \"0\");\r\n                        if ((/\\d/).test(values[cc].charAt(1)) === true) {\r\n                            values[cc] = values[cc].substr(1);\r\n                        }\r\n                    }\r\n                    else if ((/^url\\((?!('|\"))/).test(values[cc]) === true && values[cc].charAt(values[cc].length - 1) === \")\") {\r\n                        block = values[cc].charAt(values[cc].indexOf(\"url(\") + 4);\r\n                        if (block !== \"@\" && block !== \"{\" && block !== \"<\") {\r\n                            if (options.lexer_options.style.quote_convert === \"double\") {\r\n                                values[cc] = values[cc]\r\n                                    .replace(/url\\(/, \"url(\\\"\")\r\n                                    .replace(/\\)$/, \"\\\")\");\r\n                            }\r\n                            else {\r\n                                values[cc] = values[cc]\r\n                                    .replace(/url\\(/, \"url('\")\r\n                                    .replace(/\\)$/, \"')\");\r\n                            }\r\n                        }\r\n                    }\r\n                    if ((/^(\\+|-)?\\d+(\\.\\d+)?(e-?\\d+)?\\D+$/).test(values[cc]) === true) {\r\n                        if (dimensions.indexOf(values[cc].replace(/(\\+|-)?\\d+(\\.\\d+)?(e-?\\d+)?/, \"\")) < 0) {\r\n                            values[cc] = values[cc].replace(/(\\+|-)?\\d+(\\.\\d+)?(e-?\\d+)?/, diFix);\r\n                        }\r\n                    }\r\n                    if ((/^\\w+\\(/).test(values[cc]) === true &&\r\n                        values[cc].charAt(values[cc].length - 1) === \")\" &&\r\n                        (values[cc].indexOf(\"url(\") !== 0 || (values[cc].indexOf(\"url(\") === 0 && values[cc].indexOf(\" \") > 0))) {\r\n                        values[cc] = values[cc].replace(/,\\S/g, commaspace);\r\n                    }\r\n                    cc = cc + 1;\r\n                } while (cc < leng);\r\n            }\r\n            block = values.join(\" \");\r\n            return block.charAt(0) + block.slice(1)\r\n                .replace(/\\s*(\\/|\\+|\\*)\\s*(\\d|\\$)/, valueSpace);\r\n        }, \r\n        //the generic token builder\r\n        buildtoken = function lexer_style_build() {\r\n            let aa = a, bb = 0, out = [], outy = \"\", funk = null, mappy = 0;\r\n            const block = [], qc = (options.lexer_options.style.quote_convert === undefined)\r\n                ? \"none\"\r\n                : options.lexer_options.style.quote_convert, spacestart = function lexer_style_build_spacestart() {\r\n                out.push(b[aa]);\r\n                if ((/\\s/).test(b[aa + 1]) === true) {\r\n                    do {\r\n                        aa = aa + 1;\r\n                    } while (aa < len && (/\\s/).test(b[aa + 1]) === true);\r\n                }\r\n            };\r\n            if (aa < len) {\r\n                //this loop accounts for grouping mechanisms\r\n                do {\r\n                    if (b[aa] === \"\\\"\" || b[aa] === \"'\") {\r\n                        if (funk === null) {\r\n                            funk = false;\r\n                        }\r\n                        if (block[block.length - 1] === b[aa] && (b[aa - 1] !== \"\\\\\" || esctest(aa - 1) === false)) {\r\n                            block.pop();\r\n                            if (qc === \"double\") {\r\n                                b[aa] = \"\\\"\";\r\n                            }\r\n                            else if (qc === \"single\") {\r\n                                b[aa] = \"'\";\r\n                            }\r\n                        }\r\n                        else if (block[block.length - 1] !== \"\\\"\" && block[block.length - 1] !== \"'\" && (b[aa - 1] !== \"\\\\\" || esctest(aa - 1) === false)) {\r\n                            block.push(b[aa]);\r\n                            if (qc === \"double\") {\r\n                                b[aa] = \"\\\"\";\r\n                            }\r\n                            else if (qc === \"single\") {\r\n                                b[aa] = \"'\";\r\n                            }\r\n                        }\r\n                        else if (b[aa - 1] === \"\\\\\" && qc !== \"none\") {\r\n                            if (esctest(aa - 1) === true) {\r\n                                if (qc === \"double\" && b[aa] === \"'\") {\r\n                                    out.pop();\r\n                                }\r\n                                else if (qc === \"single\" && b[aa] === \"\\\"\") {\r\n                                    out.pop();\r\n                                }\r\n                            }\r\n                        }\r\n                        else if (qc === \"double\" && b[aa] === \"\\\"\") {\r\n                            b[aa] = \"\\\\\\\"\";\r\n                        }\r\n                        else if (qc === \"single\" && b[aa] === \"'\") {\r\n                            b[aa] = \"\\\\'\";\r\n                        }\r\n                        out.push(b[aa]);\r\n                    }\r\n                    else if (b[aa - 1] !== \"\\\\\" || esctest(aa - 1) === false) {\r\n                        if (b[aa] === \"(\") {\r\n                            if (funk === null) {\r\n                                funk = true;\r\n                            }\r\n                            mappy = mappy + 1;\r\n                            block.push(\")\");\r\n                            spacestart();\r\n                        }\r\n                        else if (b[aa] === \"[\") {\r\n                            funk = false;\r\n                            block.push(\"]\");\r\n                            spacestart();\r\n                        }\r\n                        else if ((b[aa] === \"#\" || b[aa] === \"@\") && b[aa + 1] === \"{\") {\r\n                            funk = false;\r\n                            out.push(b[aa]);\r\n                            aa = aa + 1;\r\n                            block.push(\"}\");\r\n                            spacestart();\r\n                        }\r\n                        else if (b[aa] === block[block.length - 1]) {\r\n                            out.push(b[aa]);\r\n                            block.pop();\r\n                        }\r\n                        else {\r\n                            out.push(b[aa]);\r\n                        }\r\n                    }\r\n                    else {\r\n                        out.push(b[aa]);\r\n                    }\r\n                    if (parse.structure[parse.structure.length - 1][0] === \"map\" && block.length === 0 && (b[aa + 1] === \",\" || b[aa + 1] === \")\")) {\r\n                        if (b[aa + 1] === \")\" && data.token[parse.count] === \"(\") {\r\n                            parse.pop(data);\r\n                            parse.structure.pop();\r\n                            out.splice(0, 0, \"(\");\r\n                        }\r\n                        else {\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (b[aa + 1] === \":\") {\r\n                        bb = aa;\r\n                        if ((/\\s/).test(b[bb]) === true) {\r\n                            do {\r\n                                bb = bb - 1;\r\n                            } while ((/\\s/).test(b[bb]) === true);\r\n                        }\r\n                        outy = b\r\n                            .slice(bb - 6, bb + 1)\r\n                            .join(\"\");\r\n                        if (outy.indexOf(\"filter\") === outy.length - 6 || outy.indexOf(\"progid\") === outy.length - 6) {\r\n                            outy = \"filter\";\r\n                        }\r\n                    }\r\n                    if (block.length === 0) {\r\n                        if ((b[aa + 1] === \";\" && esctest(aa + 1) === true) ||\r\n                            (b[aa + 1] === \":\" &&\r\n                                b[aa] !== \":\" &&\r\n                                b[aa + 2] !== \":\" &&\r\n                                outy !== \"filter\" &&\r\n                                outy !== \"progid\") ||\r\n                            b[aa + 1] === \"}\" ||\r\n                            b[aa + 1] === \"{\" ||\r\n                            (b[aa + 1] === \"/\" && (b[aa + 2] === \"*\" || b[aa + 2] === \"/\"))) {\r\n                            bb = out.length - 1;\r\n                            if ((/\\s/).test(out[bb]) === true) {\r\n                                do {\r\n                                    bb = bb - 1;\r\n                                    aa = aa - 1;\r\n                                    out.pop();\r\n                                } while ((/\\s/).test(out[bb]) === true);\r\n                            }\r\n                            break;\r\n                        }\r\n                        if (b[aa + 1] === \",\") {\r\n                            break;\r\n                        }\r\n                    }\r\n                    aa = aa + 1;\r\n                } while (aa < len);\r\n            }\r\n            a = aa;\r\n            if (parse.structure[parse.structure.length - 1][0] === \"map\" && out[0] === \"(\") {\r\n                mapper[mapper.length - 1] = mapper[mapper.length - 1] - 1;\r\n            }\r\n            ltoke = out\r\n                .join(\"\")\r\n                .replace(/\\s+/g, \" \")\r\n                .replace(/^\\s/, \"\")\r\n                .replace(/\\s$/, \"\");\r\n            if (funk === true) {\r\n                ltoke = ltoke.replace(/\\s+\\(/g, \"(\").replace(/\\s+\\)/g, \")\").replace(/,\\(/g, \", (\");\r\n            }\r\n            if (parse.count > -1 && data.token[parse.count].indexOf(\"extend(\") === 0) {\r\n                ltype = \"pseudo\";\r\n            }\r\n            else if (funk === true &&\r\n                (/\\d/).test(ltoke.charAt(0)) === false &&\r\n                (/^rgba?\\(/).test(ltoke) === false &&\r\n                ltoke.indexOf(\"url(\") !== 0 &&\r\n                (ltoke.indexOf(\" \") < 0 || ltoke.indexOf(\" \") > ltoke.indexOf(\"(\")) &&\r\n                ltoke.charAt(ltoke.length - 1) === \")\") {\r\n                if (data.token[parse.count] === \":\") {\r\n                    ltype = \"value\";\r\n                }\r\n                else {\r\n                    ltoke = ltoke.replace(/,\\u0020?/g, \", \");\r\n                    ltype = \"function\";\r\n                }\r\n                ltoke = value(ltoke);\r\n            }\r\n            else if (parse.count > -1 && \"\\\"'\".indexOf(data.token[parse.count].charAt(0)) > -1 && data.types[parse.count] === \"variable\") {\r\n                ltype = \"item\";\r\n            }\r\n            else if (out[0] === \"@\" || out[0] === \"$\") {\r\n                if (data.types[parse.count] === \"colon\" && options.language === \"css\" && (data.types[parse.count - 1] === \"property\" || data.types[parse.count - 1] === \"variable\")) {\r\n                    ltype = \"value\";\r\n                }\r\n                else if (parse.count > -1) {\r\n                    ltype = \"item\";\r\n                    outy = data.token[parse.count];\r\n                    aa = outy.indexOf(\"(\");\r\n                    if (outy.charAt(outy.length - 1) === \")\" && aa > 0) {\r\n                        outy = outy.slice(aa + 1, outy.length - 1);\r\n                        data.token[parse.count] = data\r\n                            .token[parse.count]\r\n                            .slice(0, aa + 1) + value(outy) + \")\";\r\n                    }\r\n                }\r\n                ltoke = value(ltoke);\r\n            }\r\n            else {\r\n                ltype = \"item\";\r\n            }\r\n            recordPush(\"\");\r\n        }, \r\n        // Some tokens receive a generic type named 'item' because their type is unknown\r\n        // until we know the following syntax.  This function replaces the type 'item'\r\n        // with something more specific.\r\n        item = function lexer_style_item(type) {\r\n            let aa = parse.count, bb = 0, first = \"\";\r\n            const comsa = [], priors = function lexer_style_item_priors() {\r\n                //backtrack through immediately prior comments to find the correct token\r\n                if (data.types[aa] === \"comment\" || data.types[aa] === \"ignore\") {\r\n                    do {\r\n                        aa = aa - 1;\r\n                        comsa.push(data.token[aa]);\r\n                    } while (aa > 0 && data.lexer[aa] === \"style\" && (data.types[aa] === \"comment\" || data.types[aa] === \"ignore\"));\r\n                }\r\n                bb = aa - 1;\r\n                if (data.types[bb] === \"comment\" || data.types[bb] === \"ignore\") {\r\n                    do {\r\n                        bb = bb - 1;\r\n                    } while (bb > 0 && data.lexer[aa] === \"style\" && (data.types[bb] === \"comment\" || data.types[bb] === \"ignore\"));\r\n                }\r\n                first = data.token[aa].charAt(0);\r\n            }, selectorPretty = function lexer_style_item_selectorPretty(index) {\r\n                let cc = index, dd = data.begin[cc];\r\n                data.token[index] = data.token[index]\r\n                    .replace(/\\s*&/, \" &\")\r\n                    .replace(/(\\s*>\\s*)/g, \" > \")\r\n                    .replace(/:\\s+/g, \": \")\r\n                    .replace(/^(\\s+)/, \"\")\r\n                    .replace(/(\\s+)$/, \"\")\r\n                    .replace(/\\s+::\\s+/, \"::\");\r\n                if (data.token[cc - 1] === \",\" || data.token[cc - 1] === \":\" || data.types[cc - 1] === \"comment\") {\r\n                    do {\r\n                        cc = cc - 1;\r\n                        if (data.begin[cc] === dd) {\r\n                            if (data.token[cc] === \";\") {\r\n                                break;\r\n                            }\r\n                            if (data.token[cc] !== \",\" && data.types[cc] !== \"comment\") {\r\n                                data.types[cc] = \"selector\";\r\n                            }\r\n                            if (data.token[cc] === \":\") {\r\n                                data.token[cc - 1] = `${data.token[cc - 1]}:${data.token[cc + 1]}`;\r\n                                parse.splice({\r\n                                    data: data,\r\n                                    howmany: 2,\r\n                                    index: cc\r\n                                });\r\n                            }\r\n                        }\r\n                        else {\r\n                            break;\r\n                        }\r\n                    } while (cc > 0);\r\n                }\r\n                // sorts comma separated lists of selectors\r\n                cc = parse.count;\r\n                if (options.lexer_options.style.object_sort === true && data.token[cc - 1] === \",\") {\r\n                    const store = [data.token[cc]];\r\n                    do {\r\n                        cc = cc - 1;\r\n                        if (data.types[cc] === \"comment\" || data.types[cc] === \"ignore\") {\r\n                            do {\r\n                                cc = cc - 1;\r\n                            } while (cc > 0 && (data.types[cc] === \"comment\" || data.types[cc] === \"ignore\"));\r\n                        }\r\n                        if (data.token[cc] === \",\") {\r\n                            cc = cc - 1;\r\n                        }\r\n                        store.push(data.token[cc]);\r\n                    } while (cc > 0 && (data.token[cc - 1] === \",\" || data.types[cc - 1] === \"selector\" || data.types[cc - 1] === \"comment\" || data.types[cc - 1] === \"ignore\"));\r\n                    store.sort();\r\n                    cc = parse.count;\r\n                    data.token[cc] = store.pop();\r\n                    do {\r\n                        cc = cc - 1;\r\n                        if (data.types[cc] === \"comment\" || data.types[cc] === \"ignore\") {\r\n                            do {\r\n                                cc = cc - 1;\r\n                            } while (cc > 0 && (data.types[cc] === \"comment\" || data.types[cc] === \"ignore\"));\r\n                        }\r\n                        if (data.token[cc] === \",\") {\r\n                            cc = cc - 1;\r\n                        }\r\n                        data.token[cc] = store.pop();\r\n                    } while (cc > 0 && (data.token[cc - 1] === \",\" || data.token[cc - 1] === \"selector\" || data.types[cc - 1] === \"comment\" || data.types[cc - 1] === \"ignore\"));\r\n                }\r\n                aa = parse.count;\r\n                priors();\r\n            };\r\n            priors();\r\n            //if the last non-comment type is 'item' then id it\r\n            if (type === \"start\" && (data.types[aa] === \"value\" || data.types[aa] === \"variable\")) {\r\n                data.types[aa] = \"item\";\r\n            }\r\n            if (data.lexer[parse.count - 1] !== \"style\" || bb < 0) {\r\n                if (type === \"colon\") {\r\n                    if (first === \"$\" || first === \"@\") {\r\n                        data.types[aa] = \"variable\";\r\n                    }\r\n                    else {\r\n                        data.types[aa] = \"property\";\r\n                    }\r\n                }\r\n                else if (data.lexer[aa] === \"style\") {\r\n                    data.types[aa] = \"selector\";\r\n                    selectorPretty(aa);\r\n                }\r\n            }\r\n            else if (type === \"start\" && data.types[aa] === \"function\" && data.lexer[aa] === \"style\") {\r\n                data.types[aa] = \"selector\";\r\n                selectorPretty(aa);\r\n            }\r\n            else if (data.types[aa] === \"item\" && data.lexer[aa] === \"style\") {\r\n                if (type === \"start\") {\r\n                    selectorPretty(aa);\r\n                    data.types[aa] = \"selector\";\r\n                    if (data.token[aa] === \":\") {\r\n                        data.types[bb] = \"selector\";\r\n                    }\r\n                    if (data.token[aa].indexOf(\"=\\u201c\") > 0) {\r\n                        sparser.parseerror = `Quote looking character (\\u201c, \\\\201c) used instead of actual quotes on line number ${parse.lineNumber}`;\r\n                    }\r\n                    else if (data.token[aa].indexOf(\"=\\u201d\") > 0) {\r\n                        sparser.parseerror = `Quote looking character (\\u201d, \\\\201d) used instead of actual quotes on line number ${parse.lineNumber}`;\r\n                    }\r\n                }\r\n                else if (type === \"end\") {\r\n                    if (first === \"$\" || first === \"@\") {\r\n                        data.types[aa] = \"variable\";\r\n                    }\r\n                    else {\r\n                        data.types[aa] = \"value\";\r\n                    }\r\n                    data.token[aa] = value(data.token[aa]);\r\n                }\r\n                else if (type === \"separator\") {\r\n                    if (data.types[bb] === \"colon\" || data.token[bb] === \",\" || data.token[bb] === \"{\") {\r\n                        if (b[a] !== \";\" && (data.types[bb] === \"selector\" || data.token[bb] === \"{\")) {\r\n                            data.types[aa] = \"selector\";\r\n                            selectorPretty(aa);\r\n                        }\r\n                        else if (data.token[aa].charAt(0) === \"$\" || data.token[aa].charAt(0) === \"@\") {\r\n                            data.types[aa] = \"variable\";\r\n                        }\r\n                        else {\r\n                            data.types[aa] = \"value\";\r\n                        }\r\n                        data.token[aa] = value(data.token[aa]);\r\n                        if (data.token[aa].charAt(0) === \"\\u201c\") {\r\n                            sparser.parseerror = `Quote looking character (\\u201c, \\\\201c) used instead of actual quotes on line number ${parse.lineNumber}`;\r\n                        }\r\n                        else if (data.token[aa].charAt(0) === \"\\u201d\") {\r\n                            sparser.parseerror = `Quote looking character (\\u201d, \\\\201d) used instead of actual quotes on line number ${parse.lineNumber}`;\r\n                        }\r\n                    }\r\n                    else {\r\n                        if (first === \"$\" || first === \"@\") {\r\n                            data.types[aa] = \"variable\";\r\n                        }\r\n                        else if (data.types[bb] === \"value\" || data.types[bb] === \"variable\") {\r\n                            data.token[bb] = data.token[bb] + data.token[aa];\r\n                            parse.pop(data);\r\n                        }\r\n                        else {\r\n                            data.types[aa] = \"value\";\r\n                        }\r\n                    }\r\n                }\r\n                else if (type === \"colon\") {\r\n                    if (first === \"$\" || first === \"@\") {\r\n                        data.types[aa] = \"variable\";\r\n                    }\r\n                    else {\r\n                        data.types[aa] = \"property\";\r\n                    }\r\n                }\r\n                else if (data.token[bb].charAt(0) === \"@\" && ((data.types[bb - 2] !== \"variable\" && data.types[bb - 2] !== \"property\") || data.types[bb - 1] === \"separator\")) {\r\n                    data.types[bb] = \"variable\";\r\n                    ltype = \"variable\";\r\n                    data.token[bb] = value(data.token[bb]);\r\n                }\r\n            }\r\n        }, semiComment = function lexer_style_separatorComment() {\r\n            let x = parse.count;\r\n            do {\r\n                x = x - 1;\r\n            } while (x > 0 && (data.types[x] === \"comment\"));\r\n            if (data.token[x] === \";\") {\r\n                return;\r\n            }\r\n            parse.splice({\r\n                data: data,\r\n                howmany: 0,\r\n                index: x + 1,\r\n                record: {\r\n                    begin: parse.structure[parse.structure.length - 1][1],\r\n                    ender: -1,\r\n                    lexer: \"style\",\r\n                    lines: parse.linesSpace,\r\n                    stack: parse.structure[parse.structure.length - 1][0],\r\n                    token: \";\",\r\n                    types: \"separator\"\r\n                }\r\n            });\r\n        }, template = function lexer_style_template(open, end) {\r\n            let quote = \"\", name = \"\", start = open.length, endlen = 0;\r\n            const store = [], exit = function lexer_style_template_exit(typename) {\r\n                const endtype = data.types[parse.count - 1];\r\n                if (ltype === \"item\") {\r\n                    if (endtype === \"colon\") {\r\n                        data.types[parse.count] = \"value\";\r\n                    }\r\n                    else {\r\n                        item(endtype);\r\n                    }\r\n                }\r\n                ltype = typename;\r\n                if (ltype.indexOf(\"start\") > -1 || ltype.indexOf(\"else\") > -1) {\r\n                    recordPush(ltoke);\r\n                }\r\n                else {\r\n                    recordPush(\"\");\r\n                }\r\n            };\r\n            nosort[nosort.length - 1] = true;\r\n            if (a < len) {\r\n                do {\r\n                    store.push(b[a]);\r\n                    if (quote === \"\") {\r\n                        if (b[a] === \"\\\"\") {\r\n                            quote = \"\\\"\";\r\n                        }\r\n                        else if (b[a] === \"'\") {\r\n                            quote = \"'\";\r\n                        }\r\n                        else if (b[a] === \"/\") {\r\n                            if (b[a + 1] === \"/\") {\r\n                                quote = \"/\";\r\n                            }\r\n                            else if (b[a + 1] === \"*\") {\r\n                                quote = \"*\";\r\n                            }\r\n                        }\r\n                        else if (b[a + 1] === end.charAt(0)) {\r\n                            do {\r\n                                endlen = endlen + 1;\r\n                                a = a + 1;\r\n                                store.push(b[a]);\r\n                            } while (a < len && endlen < end.length && b[a + 1] === end.charAt(endlen));\r\n                            if (endlen === end.length) {\r\n                                quote = store.join(\"\");\r\n                                if ((/\\s/).test(quote.charAt(start)) === true) {\r\n                                    do {\r\n                                        start = start + 1;\r\n                                    } while ((/\\s/).test(quote.charAt(start)) === true);\r\n                                }\r\n                                endlen = start;\r\n                                do {\r\n                                    endlen = endlen + 1;\r\n                                } while (endlen < end.length && (/\\s/).test(quote.charAt(endlen)) === false);\r\n                                if (endlen === quote.length) {\r\n                                    endlen = endlen - end.length;\r\n                                }\r\n                                if (open === \"{%\") {\r\n                                    if (quote.indexOf(\"{%-\") === 0) {\r\n                                        quote = quote\r\n                                            .replace(/^(\\{%-\\s*)/, \"{%- \")\r\n                                            .replace(/(\\s*-%\\})$/, \" -%}\");\r\n                                        name = quote.slice(4);\r\n                                    }\r\n                                    else {\r\n                                        quote = quote\r\n                                            .replace(/^(\\{%\\s*)/, \"{% \")\r\n                                            .replace(/(\\s*%\\})$/, \" %}\");\r\n                                        name = quote.slice(3);\r\n                                    }\r\n                                }\r\n                                if (open === \"{{\") {\r\n                                    quote = quote\r\n                                        .replace(/^(\\{\\{\\s+)/, \"{{\")\r\n                                        .replace(/(\\s+\\}\\})$/, \"}}\");\r\n                                }\r\n                                if (ltype === \"item\" && data.types[parse.count - 1] === \"colon\" && (data.types[parse.count - 2] === \"property\" || data.types[parse.count - 2] === \"variable\")) {\r\n                                    ltype = \"value\";\r\n                                    data.types[parse.count] = \"value\";\r\n                                    if (Number.isNaN(Number(data.token[parse.count])) === true && data.token[parse.count].charAt(data.token[parse.count].length - 1) !== \")\") {\r\n                                        data.token[parse.count] = data.token[parse.count] + quote;\r\n                                    }\r\n                                    else {\r\n                                        data.token[parse.count] = data.token[parse.count] + \" \" + quote;\r\n                                    }\r\n                                    return;\r\n                                }\r\n                                ltoke = quote;\r\n                                if (open === \"{%\") {\r\n                                    const templateNames = [\r\n                                        \"autoescape\",\r\n                                        \"block\",\r\n                                        \"capture\",\r\n                                        \"case\",\r\n                                        \"comment\",\r\n                                        \"embed\",\r\n                                        \"filter\",\r\n                                        \"for\",\r\n                                        \"form\",\r\n                                        \"if\",\r\n                                        \"macro\",\r\n                                        \"paginate\",\r\n                                        \"raw\",\r\n                                        \"sandbox\",\r\n                                        \"spaceless\",\r\n                                        \"tablerow\",\r\n                                        \"unless\",\r\n                                        \"verbatim\"\r\n                                    ];\r\n                                    let namesLen = templateNames.length - 1;\r\n                                    name = name.slice(0, name.indexOf(\" \"));\r\n                                    if (name.indexOf(\"(\") > 0) {\r\n                                        name = name.slice(0, name.indexOf(\"(\"));\r\n                                    }\r\n                                    if (name === \"else\" || name === \"elseif\" || name === \"when\" || name === \"elif\") {\r\n                                        exit(\"template_else\");\r\n                                        return;\r\n                                    }\r\n                                    namesLen = templateNames.length - 1;\r\n                                    if (namesLen > -1) {\r\n                                        do {\r\n                                            if (name === templateNames[namesLen]) {\r\n                                                exit(\"template_start\");\r\n                                                return;\r\n                                            }\r\n                                            if (name === \"end\" + templateNames[namesLen]) {\r\n                                                exit(\"template_end\");\r\n                                                return;\r\n                                            }\r\n                                            namesLen = namesLen - 1;\r\n                                        } while (namesLen > -1);\r\n                                    }\r\n                                }\r\n                                else if (open === \"{{\") {\r\n                                    let group = quote.slice(2), ending = group.length, begin = 0;\r\n                                    do {\r\n                                        begin = begin + 1;\r\n                                    } while (begin < ending && (/\\s/).test(group.charAt(begin)) === false && group.charAt(start) !== \"(\");\r\n                                    group = group.slice(0, begin);\r\n                                    if (group.charAt(group.length - 2) === \"}\") {\r\n                                        group = group.slice(0, group.length - 2);\r\n                                    }\r\n                                    if (group === \"end\") {\r\n                                        exit(\"template_end\");\r\n                                        return;\r\n                                    }\r\n                                    if (group === \"block\" || group === \"define\" || group === \"form\" || group === \"if\" || group === \"range\" || group === \"with\") {\r\n                                        exit(\"template_start\");\r\n                                        return;\r\n                                    }\r\n                                }\r\n                                if ((/\\{\\s*\\?>$/).test(ltoke) === true) {\r\n                                    if ((/^<\\?(=|(php))\\s*\\}\\s*else/).test(ltoke) === true) {\r\n                                        exit(\"template_else\");\r\n                                        return;\r\n                                    }\r\n                                    exit(\"template_start\");\r\n                                    return;\r\n                                }\r\n                                if ((/^<\\?(=|(php))\\s*\\}/).test(ltoke) === true) {\r\n                                    if ((/^<\\?(=|(php))\\s*\\}\\s*else/).test(ltoke) === true) {\r\n                                        exit(\"template_else\");\r\n                                        return;\r\n                                    }\r\n                                    exit(\"template_end\");\r\n                                    return;\r\n                                }\r\n                                exit(\"template\");\r\n                                return;\r\n                            }\r\n                            endlen = 0;\r\n                        }\r\n                    }\r\n                    else if (quote === b[a]) {\r\n                        if (quote === \"\\\"\" || quote === \"'\") {\r\n                            quote = \"\";\r\n                        }\r\n                        else if (quote === \"/\" && (b[a] === \"\\r\" || b[a] === \"\\n\")) {\r\n                            quote = \"\";\r\n                        }\r\n                        else if (quote === \"*\" && b[a + 1] === \"/\") {\r\n                            quote = \"\";\r\n                        }\r\n                    }\r\n                    a = a + 1;\r\n                } while (a < len);\r\n            }\r\n        }, \r\n        //finds comments including those JS looking '//' comments\r\n        comment = function lexer_style_comment(line) {\r\n            let comm = (line === true)\r\n                ? parse.wrapCommentLine({\r\n                    chars: b,\r\n                    end: len,\r\n                    lexer: \"style\",\r\n                    opening: \"//\",\r\n                    start: a,\r\n                    terminator: \"\\n\"\r\n                })\r\n                : parse.wrapCommentBlock({\r\n                    chars: b,\r\n                    end: len,\r\n                    lexer: \"style\",\r\n                    opening: \"/*\",\r\n                    start: a,\r\n                    terminator: \"\\u002a/\"\r\n                });\r\n            ltoke = comm[0];\r\n            ltype = ((/^(\\/\\*\\s*parse-ignore-start)/).test(ltoke) === true)\r\n                ? \"ignore\"\r\n                : \"comment\";\r\n            recordPush(\"\");\r\n            a = comm[1];\r\n        }, \r\n        //consolidate margin and padding values\r\n        margin_padding = function lexer_style_marginPadding() {\r\n            const lines = parse.linesSpace, props = {\r\n                data: {\r\n                    margin: [\"\", \"\", \"\", \"\", false],\r\n                    padding: [\"\", \"\", \"\", \"\", false]\r\n                },\r\n                last: {\r\n                    margin: 0,\r\n                    padding: 0\r\n                },\r\n                removes: []\r\n            }, begin = parse.structure[parse.structure.length - 1][1], populate = function lexer_style_marginPadding_populate(prop) {\r\n                if (data.token[aa - 2] === prop) {\r\n                    const values = data.token[aa].replace(/\\s*!important\\s*/g, \"\").split(\" \"), vlen = values.length;\r\n                    if (data.token[aa].indexOf(\"!important\") > -1) {\r\n                        props.data[prop[4]] = true;\r\n                    }\r\n                    if (vlen > 3) {\r\n                        if (props.data[prop][0] === \"\") {\r\n                            props.data[prop][0] = values[0];\r\n                        }\r\n                        if (props.data[prop][1] === \"\") {\r\n                            props.data[prop][1] = values[1];\r\n                        }\r\n                        if (props.data[prop][2] === \"\") {\r\n                            props.data[prop][2] = values[2];\r\n                        }\r\n                        if (props.data[prop][3] === \"\") {\r\n                            props.data[prop][3] = values[3];\r\n                        }\r\n                    }\r\n                    else if (vlen > 2) {\r\n                        if (props.data[prop][0] === \"\") {\r\n                            props.data[prop][0] = values[0];\r\n                        }\r\n                        if (props.data[prop][1] === \"\") {\r\n                            props.data[prop][1] = values[1];\r\n                        }\r\n                        if (props.data[prop][2] === \"\") {\r\n                            props.data[prop][2] = values[2];\r\n                        }\r\n                        if (props.data[prop][3] === \"\") {\r\n                            props.data[prop][3] = values[1];\r\n                        }\r\n                    }\r\n                    else if (vlen > 1) {\r\n                        if (props.data[prop][0] === \"\") {\r\n                            props.data[prop][0] = values[0];\r\n                        }\r\n                        if (props.data[prop][1] === \"\") {\r\n                            props.data[prop][1] = values[1];\r\n                        }\r\n                        if (props.data[prop][2] === \"\") {\r\n                            props.data[prop][2] = values[0];\r\n                        }\r\n                        if (props.data[prop][3] === \"\") {\r\n                            props.data[prop][3] = values[1];\r\n                        }\r\n                    }\r\n                    else {\r\n                        if (props.data[prop][0] === \"\") {\r\n                            props.data[prop][0] = values[0];\r\n                        }\r\n                        if (props.data[prop][1] === \"\") {\r\n                            props.data[prop][1] = values[0];\r\n                        }\r\n                        if (props.data[prop][2] === \"\") {\r\n                            props.data[prop][2] = values[0];\r\n                        }\r\n                        if (props.data[prop][3] === \"\") {\r\n                            props.data[prop][3] = values[0];\r\n                        }\r\n                    }\r\n                }\r\n                else if (data.token[aa - 2] === `${prop}-bottom`) {\r\n                    if (props.data[prop][2] === \"\") {\r\n                        props.data[prop][2] = data.token[aa];\r\n                    }\r\n                }\r\n                else if (data.token[aa - 2] === `${prop}-left`) {\r\n                    if (props.data[prop][3] === \"\") {\r\n                        props.data[prop][3] = data.token[aa];\r\n                    }\r\n                }\r\n                else if (data.token[aa - 2] === `${prop}-right`) {\r\n                    if (props.data[prop][1] === \"\") {\r\n                        props.data[prop][1] = data.token[aa];\r\n                    }\r\n                }\r\n                else if (data.token[aa - 2] === `${prop}-top`) {\r\n                    if (props.data[prop][0] === \"\") {\r\n                        props.data[prop][0] = data.token[aa];\r\n                    }\r\n                }\r\n                else {\r\n                    return;\r\n                }\r\n                props.removes.push([aa, prop]);\r\n                props.last[prop] = aa;\r\n            }, removes = function lexer_style_marginPadding_removes() {\r\n                let cc = 0, values = \"\";\r\n                const zero = (/^(0+([a-z]+|%))/), bb = props.removes.length, tmargin = (props.data.margin[0] !== \"\" && props.data.margin[1] !== \"\" && props.data.margin[2] !== \"\" && props.data.margin[3] !== \"\"), tpadding = (props.data.padding[0] !== \"\" && props.data.padding[1] !== \"\" && props.data.padding[2] !== \"\" && props.data.padding[3] !== \"\"), applyValues = function lexer_style_marginPadding_removes_applyValues(prop) {\r\n                    if (zero.test(props.data[prop][0]) === true) {\r\n                        props.data[prop][0] = \"0\";\r\n                    }\r\n                    if (zero.test(props.data[prop][1]) === true) {\r\n                        props.data[prop][1] = \"0\";\r\n                    }\r\n                    if (zero.test(props.data[prop][2]) === true) {\r\n                        props.data[prop][2] = \"0\";\r\n                    }\r\n                    if (zero.test(props.data[prop][3]) === true) {\r\n                        props.data[prop][3] = \"0\";\r\n                    }\r\n                    if (props.data[prop][0] === props.data[prop][1] && props.data[prop][0] === props.data[prop][2] && props.data[prop][0] === props.data[prop][3]) {\r\n                        values = props.data[prop][0];\r\n                    }\r\n                    else if (props.data[prop][0] === props.data[prop][2] && props.data[prop][1] === props.data[prop][3] && props.data[prop][0] !== props.data[prop][1]) {\r\n                        values = `${props.data[prop][0]} ${props.data[prop][1]}`;\r\n                    }\r\n                    else if (props.data[prop][1] === props.data[prop][3] && props.data[prop][0] !== props.data[prop][2]) {\r\n                        values = `${props.data[prop][0]} ${props.data[prop][1]} ${props.data[prop][2]}`;\r\n                    }\r\n                    else {\r\n                        values = `${props.data[prop][0]} ${props.data[prop][1]} ${props.data[prop][2]} ${props.data[prop][3]}`;\r\n                    }\r\n                    if (props.data[prop[4]] === true) {\r\n                        values = `${values.replace(\" !important\", \"\")} !important`;\r\n                    }\r\n                    if (props.last[prop] > parse.count) {\r\n                        cc = (begin < 1)\r\n                            ? 1\r\n                            : begin + 1;\r\n                        do {\r\n                            if (data.begin[cc] === begin && data.types[cc] === \"value\" && data.token[cc - 2].indexOf(prop) === 0) {\r\n                                props.last[prop] = cc;\r\n                                break;\r\n                            }\r\n                            cc = cc + 1;\r\n                        } while (cc < parse.count);\r\n                    }\r\n                    data.token[props.last[prop]] = values;\r\n                    data.token[props.last[prop] - 2] = prop;\r\n                };\r\n                if (bb > 1 && (tmargin === true || tpadding === true)) {\r\n                    do {\r\n                        if (props.removes[cc][0] !== props.last.margin && props.removes[cc][0] !== props.last.padding && ((tmargin === true && props.removes[cc][1] === \"margin\") || (tpadding === true && props.removes[cc][1] === \"padding\"))) {\r\n                            parse.splice({\r\n                                data: data,\r\n                                howmany: (data.types[props.removes[cc][0] + 1] === \"separator\")\r\n                                    ? 4\r\n                                    : 3,\r\n                                index: props.removes[cc][0] - 2\r\n                            });\r\n                        }\r\n                        cc = cc + 1;\r\n                    } while (cc < bb - 1);\r\n                }\r\n                if (tmargin === true) {\r\n                    applyValues(\"margin\");\r\n                }\r\n                if (tpadding === true) {\r\n                    applyValues(\"padding\");\r\n                }\r\n                // this is necessary to fix the \"begin\" values of descendent blocks\r\n                if (endtest === true) {\r\n                    if (begin < 0) {\r\n                        sparser.parseerror = \"Brace mismatch.  There appears to be more closing braces than starting braces.\";\r\n                    }\r\n                    else {\r\n                        parse.sortCorrection(begin, parse.count + 1);\r\n                    }\r\n                }\r\n            };\r\n            let aa = parse.count, endtest = false;\r\n            do {\r\n                aa = aa - 1;\r\n                if (data.begin[aa] === begin) {\r\n                    if (data.types[aa] === \"value\" && data.types[aa - 2] === \"property\") {\r\n                        if (data.token[aa - 2].indexOf(\"margin\") === 0) {\r\n                            populate(\"margin\");\r\n                        }\r\n                        else if (data.token[aa - 2].indexOf(\"padding\") === 0) {\r\n                            populate(\"padding\");\r\n                        }\r\n                    }\r\n                }\r\n                else {\r\n                    endtest = true;\r\n                    aa = data.begin[aa];\r\n                }\r\n            } while (aa > begin);\r\n            removes();\r\n            parse.linesSpace = lines;\r\n        };\r\n        //token building loop\r\n        do {\r\n            if ((/\\s/).test(b[a]) === true) {\r\n                a = parse.spacer({ array: b, end: len, index: a });\r\n            }\r\n            else if (b[a] === \"/\" && b[a + 1] === \"*\") {\r\n                comment(false);\r\n            }\r\n            else if (b[a] === \"/\" && b[a + 1] === \"/\") {\r\n                comment(true);\r\n            }\r\n            else if (b[a] === \"<\" && b[a + 1] === \"?\" && b[a + 2] === \"p\" && b[a + 3] === \"h\" && b[a + 4] === \"p\") {\r\n                //php\r\n                template(\"<?php\", \"?>\");\r\n            }\r\n            else if (b[a] === \"<\" && b[a + 1] === \"?\" && b[a + 2] === \"=\") {\r\n                //php\r\n                template(\"<?=\", \"?>\");\r\n            }\r\n            else if (b[a] === \"<\" && b[a + 1] === \"%\") {\r\n                //asp\r\n                template(\"<%\", \"%>\");\r\n            }\r\n            else if (b[a] === \"{\" && b[a + 1] === \"%\") {\r\n                //asp\r\n                template(\"{%\", \"%}\");\r\n            }\r\n            else if (b[a] === \"{\" && b[a + 1] === \"{\" && b[a + 2] === \"{\") {\r\n                //mustache\r\n                template(\"{{{\", \"}}}\");\r\n            }\r\n            else if (b[a] === \"{\" && b[a + 1] === \"{\") {\r\n                //handlebars\r\n                template(\"{{\", \"}}\");\r\n            }\r\n            else if (b[a] === \"<\" && b[a + 1] === \"!\" && b[a + 2] === \"-\" && b[a + 3] === \"-\" && b[a + 4] === \"#\") {\r\n                //ssi\r\n                template(\"<!--#\", \"-->\");\r\n            }\r\n            else if (b[a] === \"@\" && b[a + 1] === \"e\" && b[a + 2] === \"l\" && b[a + 3] === \"s\" && b[a + 4] === \"e\" && (b[a + 5] === \"{\" || (/\\s/).test(b[a + 5]) === true)) {\r\n                ltoke = \"@else\";\r\n                ltype = \"template_else\";\r\n                recordPush(\"\");\r\n                a = a + 4;\r\n            }\r\n            else if (b[a] === \"{\" || (b[a] === \"(\" && data.token[parse.count] === \":\" && data.types[parse.count - 1] === \"variable\")) {\r\n                item(\"start\");\r\n                ltype = \"start\";\r\n                ltoke = b[a];\r\n                if (b[a] === \"(\") {\r\n                    recordPush(\"map\");\r\n                    mapper.push(0);\r\n                }\r\n                else if (data.types[parse.count] === \"selector\" || data.types[parse.count] === \"variable\") {\r\n                    recordPush(data.token[parse.count]);\r\n                }\r\n                else if (data.types[parse.count] === \"colon\") {\r\n                    recordPush(data.token[parse.count - 1]);\r\n                }\r\n                else {\r\n                    recordPush(\"block\");\r\n                }\r\n                nosort.push(false);\r\n            }\r\n            else if (b[a] === \"}\" || (b[a] === \")\" && parse.structure[parse.structure.length - 1][0] === \"map\" && mapper[mapper.length - 1] === 0)) {\r\n                if (b[a] === \"}\" && data.types[parse.count] === \"item\" && data.token[parse.count - 1] === \"{\" && data.token[parse.count - 2] !== undefined && data.token[parse.count - 2].charAt(data.token[parse.count - 2].length - 1) === \"@\") {\r\n                    data.token[parse.count - 2] = data.token[parse.count - 2] + \"{\" + data.token[parse.count] +\r\n                        \"}\";\r\n                    parse.pop(data);\r\n                    parse.pop(data);\r\n                    parse.structure.pop();\r\n                }\r\n                else {\r\n                    if (b[a] === \")\") {\r\n                        mapper.pop();\r\n                    }\r\n                    item(\"end\");\r\n                    if (b[a] === \"}\" && data.token[parse.count] !== \";\") {\r\n                        if (data.types[parse.count] === \"value\" || data.types[parse.count] === \"function\" || (data.types[parse.count] === \"variable\" && (data.token[parse.count - 1] === \":\" || data.token[parse.count - 1] === \";\"))) {\r\n                            if (options.correct === true) {\r\n                                ltoke = \";\";\r\n                            }\r\n                            else {\r\n                                ltoke = \"x;\";\r\n                            }\r\n                            ltype = \"separator\";\r\n                            recordPush(\"\");\r\n                        }\r\n                        else if (data.types[parse.count] === \"comment\") {\r\n                            semiComment();\r\n                        }\r\n                    }\r\n                    ltype = \"end\";\r\n                    nosort.pop();\r\n                    ltoke = b[a];\r\n                    ltype = \"end\";\r\n                    if (b[a] === \"}\") {\r\n                        margin_padding();\r\n                    }\r\n                    if (options.lexer_options.style.object_sort === true && b[a] === \"}\") {\r\n                        parse.object_sort(data);\r\n                    }\r\n                    recordPush(\"\");\r\n                }\r\n            }\r\n            else if (b[a] === \";\" || b[a] === \",\") {\r\n                if (data.types[parse.count - 1] === \"selector\" || (data.token[parse.count - 1] === \"}\" && data.types[parse.count] !== \"function\")) {\r\n                    item(\"start\");\r\n                }\r\n                else {\r\n                    item(\"separator\");\r\n                }\r\n                if (data.types[parse.count] !== \"separator\" && esctest(a) === true) {\r\n                    ltoke = b[a];\r\n                    ltype = \"separator\";\r\n                    recordPush(\"\");\r\n                }\r\n            }\r\n            else if (b[a] === \":\" && data.types[parse.count] !== \"end\") {\r\n                item(\"colon\");\r\n                ltoke = \":\";\r\n                ltype = \"colon\";\r\n                recordPush(\"\");\r\n            }\r\n            else {\r\n                if (parse.structure[parse.structure.length - 1][0] === \"map\" && b[a] === \"(\") {\r\n                    mapper[mapper.length - 1] = mapper[mapper.length - 1] + 1;\r\n                }\r\n                buildtoken();\r\n            }\r\n            a = a + 1;\r\n        } while (a < len);\r\n        if (options.lexer_options.style.object_sort === true) {\r\n            parse.object_sort(data);\r\n        }\r\n        return data;\r\n    };\r\n    sparser.lexers.style = style;\r\n}());\r\n(function markdown_init() {\r\n    \r\n    const markdown = function lexer_markdown(source) {\r\n        let a = 0, b = 0, bc1 = 0, bc2 = 0, quote = \"\", stack = [];\r\n        const parse = sparser.parse, data = parse.data, options = sparser.options, lines = (options.crlf === true)\r\n            // eslint-disable-next-line\r\n            ? source.replace(/\\u0000/g, \"\\ufffd\").split(\"\\r\\n\")\r\n            // eslint-disable-next-line\r\n            : source.replace(/\\u0000/g, \"\\ufffd\").split(\"\\n\"), frontspace = function lexer_markdown_frontspace(index) {\r\n            const space = (/^\\s+/).exec(lines[index]);\r\n            if (space === null) {\r\n                return \"\";\r\n            }\r\n            return space[0];\r\n        }, hr = function lexer_markdown_hr() {\r\n            parse.push(data, {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"markdown\",\r\n                lines: 0,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: \"<hr/>\",\r\n                types: \"singleton\"\r\n            }, \"\");\r\n        }, text = function lexer_markdown_text(item, tag, listrecurse) {\r\n            const headerId = function lexer_markdown_text_headerId(tag) {\r\n                if ((/<\\/h\\d>/).test(tag) === false) {\r\n                    return tag;\r\n                }\r\n                const store = [], parent = parse.structure[parse.structure.length - 1];\r\n                let aa = parent[1] + 1, id = \"\";\r\n                do {\r\n                    if (data.types[aa] === \"content\") {\r\n                        store.push(data.token[aa]);\r\n                    }\r\n                    aa = aa + 1;\r\n                } while (aa < parse.count);\r\n                if (store.length > 0) {\r\n                    id = `id=\"${store.join(\" \").replace(/\\s+/g, \"-\").replace(/\\.|\\(|\\)|:|\\?|#|=|\\{|\\}|\\[|\\]/g, \"\").replace(/-+/g, \"-\").replace(/^-/, \"\").replace(/-$/, \"\").toLowerCase()}\"`;\r\n                    parse.splice({\r\n                        data: data,\r\n                        howmany: 0,\r\n                        index: parent[1] + 1,\r\n                        record: {\r\n                            begin: parent[1],\r\n                            ender: -1,\r\n                            lexer: \"markdown\",\r\n                            lines: 0,\r\n                            stack: parent[0],\r\n                            token: id,\r\n                            types: \"attribute\"\r\n                        }\r\n                    });\r\n                }\r\n                return tag;\r\n            };\r\n            let tagend = tag.replace(\"<\", \"</\"), struct = tag.replace(\"<\", \"\").replace(/(\\/?>)$/, \"\");\r\n            // line containing strong, em, or inline code\r\n            if (item.indexOf(\"*\") > -1 || item.indexOf(\"_\") > -1 || item.indexOf(\"`\") > -1 || (item.indexOf(\"[\") > -1 && item.indexOf(\"](\") > -1)) {\r\n                const esctest = function lexer_markdown_text_esctest() {\r\n                    let bb = aa - 1;\r\n                    if (str[bb] === \"\\\\\") {\r\n                        do {\r\n                            bb = bb - 1;\r\n                        } while (str[bb] === \"\\\\\");\r\n                        if ((aa - bb) % 2 === 1) {\r\n                            return true;\r\n                        }\r\n                        return false;\r\n                    }\r\n                    return false;\r\n                }, underscore = function lexer_markdown_text_underscore() {\r\n                    const numb = (str[aa + 1] === \"_\")\r\n                        ? 2\r\n                        : 1;\r\n                    if ((/\\s/).test(str[aa - 1]) === true || aa === 0 || aa === bb - numb || (/\\s/).test(str[aa + numb]) === true) {\r\n                        return true;\r\n                    }\r\n                    return false;\r\n                }, gencontent = function lexer_markdown_text_gencontent() {\r\n                    return itemx.join(\"\").replace(/\\s+/g, \" \").replace(/^\\s/, \"\").replace(/\\s$/, \"\").replace(/\\\\(?!(\\\\))/g, \"\").replace(/\\\\{2}/g, \"\\\\\");\r\n                };\r\n                let stray = \"\", str = item.split(\"\"), content = \"\", itemx = [], square = 0, aa = 0, bb = str.length, cc = 0;\r\n                if (tag !== \"multiline\") {\r\n                    parse.push(data, {\r\n                        begin: parse.structure[parse.structure.length - 1][1],\r\n                        ender: -1,\r\n                        lexer: \"markdown\",\r\n                        lines: 0,\r\n                        stack: parse.structure[parse.structure.length - 1][0],\r\n                        token: tag,\r\n                        types: \"start\"\r\n                    }, struct);\r\n                }\r\n                do {\r\n                    if (str[aa] === \"[\" && esctest() === false) {\r\n                        cc = aa;\r\n                        square = 0;\r\n                        do {\r\n                            if (str[cc] === \"[\") {\r\n                                square = square + 1;\r\n                            }\r\n                            else if (str[cc] === \"]\") {\r\n                                square = square - 1;\r\n                                if (square < 1 && str[cc + 1] === \"(\") {\r\n                                    content = itemx.join(\"\").replace(/\\s+/g, \" \").replace(/^\\s/, \"\").replace(/\\s$/, \"\");\r\n                                    if (content !== \"\") {\r\n                                        parse.push(data, {\r\n                                            begin: parse.structure[parse.structure.length - 1][1],\r\n                                            ender: -1,\r\n                                            lexer: \"markdown\",\r\n                                            lines: 0,\r\n                                            stack: parse.structure[parse.structure.length - 1][0],\r\n                                            token: content,\r\n                                            types: \"content\"\r\n                                        }, \"\");\r\n                                    }\r\n                                    itemx = [];\r\n                                    stack.push(\"[\");\r\n                                    if (str[aa - 1] === \"!\") {\r\n                                        content = \"img\";\r\n                                    }\r\n                                    else {\r\n                                        content = \"a\";\r\n                                    }\r\n                                    if (content === \"img\") {\r\n                                        if (data.token[parse.count] === \"!\") {\r\n                                            parse.pop(data);\r\n                                        }\r\n                                        else if (data.types[parse.count] === \"content\") {\r\n                                            data.token[parse.count] = data.token[parse.count].slice(0, data.token[parse.count].length - 1).replace(/(\\s)$/, \"\");\r\n                                        }\r\n                                        parse.push(data, {\r\n                                            begin: parse.structure[parse.structure.length - 1][1],\r\n                                            ender: -1,\r\n                                            lexer: \"markdown\",\r\n                                            lines: 1,\r\n                                            stack: parse.structure[parse.structure.length - 1][0],\r\n                                            token: \"<img/>\",\r\n                                            types: \"singleton\"\r\n                                        }, \"\");\r\n                                        content = str.slice(aa + 1, cc).join(\"\").replace(/\\s+/g, \" \").replace(/^\\s/, \"\").replace(/\\s$/, \"\");\r\n                                        if (content !== \"\") {\r\n                                            parse.push(data, {\r\n                                                begin: parse.structure[parse.structure.length - 1][1],\r\n                                                ender: -1,\r\n                                                lexer: \"markdown\",\r\n                                                lines: 0,\r\n                                                stack: parse.structure[parse.structure.length - 1][0],\r\n                                                token: \"alt=\\\"\" + content + \"\\\"\",\r\n                                                types: \"attribute\"\r\n                                            }, \"\");\r\n                                        }\r\n                                        parse.push(data, {\r\n                                            begin: parse.structure[parse.structure.length - 1][1],\r\n                                            ender: -1,\r\n                                            lexer: \"markdown\",\r\n                                            lines: 1,\r\n                                            stack: parse.structure[parse.structure.length - 1][0],\r\n                                            token: \"src=\\\"\",\r\n                                            types: \"attribute\"\r\n                                        }, \"\");\r\n                                        aa = cc - 1;\r\n                                    }\r\n                                    else {\r\n                                        parse.push(data, {\r\n                                            begin: parse.structure[parse.structure.length - 1][1],\r\n                                            ender: -1,\r\n                                            lexer: \"markdown\",\r\n                                            lines: 1,\r\n                                            stack: parse.structure[parse.structure.length - 1][0],\r\n                                            token: \"<a>\",\r\n                                            types: \"start\"\r\n                                        }, \"a\");\r\n                                        parse.push(data, {\r\n                                            begin: parse.structure[parse.structure.length - 1][1],\r\n                                            ender: -1,\r\n                                            lexer: \"markdown\",\r\n                                            lines: 0,\r\n                                            stack: parse.structure[parse.structure.length - 1][0],\r\n                                            token: \"href=\\\"\",\r\n                                            types: \"attribute\"\r\n                                        }, \"\");\r\n                                    }\r\n                                    break;\r\n                                }\r\n                            }\r\n                            cc = cc + 1;\r\n                        } while (cc < bb);\r\n                    }\r\n                    else if (str[aa] === \"]\" && str[aa + 1] === \"(\" && esctest() === false && stack[stack.length - 1] === \"[\") {\r\n                        content = gencontent();\r\n                        if (content !== \"\" && content.length > 1 && parse.structure[parse.structure.length - 1][0] !== \"img\") {\r\n                            parse.push(data, {\r\n                                begin: parse.structure[parse.structure.length - 1][1],\r\n                                ender: -1,\r\n                                lexer: \"markdown\",\r\n                                lines: 0,\r\n                                stack: parse.structure[parse.structure.length - 1][0],\r\n                                token: content,\r\n                                types: \"content\"\r\n                            }, \"\");\r\n                        }\r\n                        cc = aa + 1;\r\n                        square = 0;\r\n                        do {\r\n                            if (str[cc] === \"(\") {\r\n                                square = square + 1;\r\n                            }\r\n                            else if (str[cc] === \")\") {\r\n                                square = square - 1;\r\n                                if (square === 0) {\r\n                                    content = str.slice(aa + 2, cc).join(\"\").replace(/\\s+/g, \" \").replace(/^\\s/, \"\").replace(/\\s$/, \"\");\r\n                                    aa = cc;\r\n                                    str[cc] = \"\";\r\n                                    itemx = [];\r\n                                    cc = (parse.structure[parse.structure.length - 1][0] === \"a\")\r\n                                        ? parse.structure[parse.structure.length - 1][1] + 1\r\n                                        : parse.count;\r\n                                    if (content === \"\") {\r\n                                        data.token[cc] = data.token[cc] + \"\\\"\";\r\n                                    }\r\n                                    else {\r\n                                        data.token[cc] = data.token[cc] + content + \"\\\"\";\r\n                                    }\r\n                                    break;\r\n                                }\r\n                            }\r\n                            cc = cc + 1;\r\n                        } while (cc < bb);\r\n                        stack.pop();\r\n                        if (parse.structure[parse.structure.length - 1][0] === \"a\") {\r\n                            parse.push(data, {\r\n                                begin: parse.structure[parse.structure.length - 1][1],\r\n                                ender: -1,\r\n                                lexer: \"markdown\",\r\n                                lines: 0,\r\n                                stack: parse.structure[parse.structure.length - 1][0],\r\n                                token: \"</a>\",\r\n                                types: \"end\"\r\n                            }, \"\");\r\n                        }\r\n                    }\r\n                    else if ((str[aa] === \"*\" || (str[aa] === \"_\" && underscore() === true) || str[aa] === \"~\") &&\r\n                        esctest() === false &&\r\n                        stack[stack.length - 1] !== \"`\" &&\r\n                        ((quote === \"\" && ((/\\s/).test(str[aa - 1]) === true ||\r\n                            aa === 0)) || quote !== \"\")) {\r\n                        if (str[aa] === \"~\") {\r\n                            quote = \"~\";\r\n                            do {\r\n                                str[aa] = \"\";\r\n                                aa = aa + 1;\r\n                            } while (str[aa] === \"~\");\r\n                        }\r\n                        else if (str[aa] === \"*\" && str[aa + 1] === \"*\") {\r\n                            quote = \"**\";\r\n                            str[aa + 1] = \"\";\r\n                        }\r\n                        else if (str[aa] === \"_\" && str[aa + 1] === \"_\") {\r\n                            quote = \"__\";\r\n                            str[aa + 1] = \"\";\r\n                        }\r\n                        else if (str[aa] === \"_\") {\r\n                            quote = \"_\";\r\n                        }\r\n                        else if (str[aa] !== \"_\") {\r\n                            quote = \"*\";\r\n                        }\r\n                        str[aa] = \"\";\r\n                        if (quote === stack[stack.length - 1]) {\r\n                            let midtag = \"</em>\";\r\n                            content = gencontent();\r\n                            if (content !== \"\") {\r\n                                parse.push(data, {\r\n                                    begin: parse.structure[parse.structure.length - 1][1],\r\n                                    ender: -1,\r\n                                    lexer: \"markdown\",\r\n                                    lines: 0,\r\n                                    stack: parse.structure[parse.structure.length - 1][0],\r\n                                    token: content,\r\n                                    types: \"content\"\r\n                                }, \"\");\r\n                            }\r\n                            itemx = [];\r\n                            if (quote === \"~\") {\r\n                                midtag = \"</strike>\";\r\n                            }\r\n                            else if (quote === \"**\" || quote === \"__\") {\r\n                                midtag = \"</strong>\";\r\n                            }\r\n                            stack.pop();\r\n                            parse.push(data, {\r\n                                begin: parse.structure[parse.structure.length - 1][1],\r\n                                ender: -1,\r\n                                lexer: \"markdown\",\r\n                                lines: 0,\r\n                                stack: parse.structure[parse.structure.length - 1][0],\r\n                                token: midtag,\r\n                                types: \"end\"\r\n                            }, \"\");\r\n                            quote = \"\";\r\n                            stack = [];\r\n                        }\r\n                        else {\r\n                            let midtag = \"em\";\r\n                            content = gencontent();\r\n                            if (content !== \"\") {\r\n                                parse.push(data, {\r\n                                    begin: parse.structure[parse.structure.length - 1][1],\r\n                                    ender: -1,\r\n                                    lexer: \"markdown\",\r\n                                    lines: 0,\r\n                                    stack: parse.structure[parse.structure.length - 1][0],\r\n                                    token: content,\r\n                                    types: \"content\"\r\n                                }, \"\");\r\n                            }\r\n                            itemx = [];\r\n                            if (quote === \"~\") {\r\n                                midtag = \"strike\";\r\n                            }\r\n                            else if (quote === \"**\" || quote === \"__\") {\r\n                                midtag = \"strong\";\r\n                            }\r\n                            stack.push(quote);\r\n                            parse.push(data, {\r\n                                begin: parse.structure[parse.structure.length - 1][1],\r\n                                ender: -1,\r\n                                lexer: \"markdown\",\r\n                                lines: 1,\r\n                                stack: parse.structure[parse.structure.length - 1][0],\r\n                                token: `<${midtag}>`,\r\n                                types: \"start\"\r\n                            }, midtag);\r\n                        }\r\n                    }\r\n                    else if (str[aa] === \"`\" && esctest() === false) {\r\n                        content = gencontent();\r\n                        if (content !== \"\") {\r\n                            parse.push(data, {\r\n                                begin: parse.structure[parse.structure.length - 1][1],\r\n                                ender: -1,\r\n                                lexer: \"markdown\",\r\n                                lines: 0,\r\n                                stack: parse.structure[parse.structure.length - 1][0],\r\n                                token: content,\r\n                                types: \"content\"\r\n                            }, \"\");\r\n                        }\r\n                        itemx = [];\r\n                        if (stack[stack.length - 1] === \"`\") {\r\n                            str[aa] = \"\";\r\n                            stack.pop();\r\n                            parse.push(data, {\r\n                                begin: parse.structure[parse.structure.length - 1][1],\r\n                                ender: -1,\r\n                                lexer: \"markdown\",\r\n                                lines: 0,\r\n                                stack: parse.structure[parse.structure.length - 1][0],\r\n                                token: \"</code>\",\r\n                                types: \"end\"\r\n                            }, \"\");\r\n                            quote = \"\";\r\n                            stack = [];\r\n                        }\r\n                        else {\r\n                            stack.push(\"`\");\r\n                            parse.push(data, {\r\n                                begin: parse.structure[parse.structure.length - 1][1],\r\n                                ender: -1,\r\n                                lexer: \"markdown\",\r\n                                lines: 1,\r\n                                stack: parse.structure[parse.structure.length - 1][0],\r\n                                token: \"<code>\",\r\n                                types: \"start\"\r\n                            }, \"code\");\r\n                        }\r\n                    }\r\n                    if (str[aa] !== stack[stack.length - 1] && str[aa - 1] + str[aa] !== stack[stack.length - 1]) {\r\n                        itemx.push(str[aa]);\r\n                    }\r\n                    aa = aa + 1;\r\n                } while (aa < bb);\r\n                content = gencontent();\r\n                if (tag !== \"multiline\" && data.types[parse.count] === \"start\" && data.token[parse.count] !== tag) {\r\n                    stray = data.token[parse.count];\r\n                    parse.pop(data);\r\n                    parse.structure.pop();\r\n                    if (stray === \"<code>\") {\r\n                        stray = \"`\";\r\n                    }\r\n                    else if (stray === \"<em>\") {\r\n                        stray = \"*\";\r\n                    }\r\n                    else if (stray === \"<strong>\") {\r\n                        stray = \"**\";\r\n                    }\r\n                    else if (stray === \"<strike>\") {\r\n                        stray = \"~\";\r\n                    }\r\n                    if (data.types[parse.count] === \"start\") {\r\n                        content = item;\r\n                    }\r\n                    else {\r\n                        data.token[parse.count] = data.token[parse.count] + stray;\r\n                    }\r\n                }\r\n                if (content !== \"\") {\r\n                    parse.push(data, {\r\n                        begin: parse.structure[parse.structure.length - 1][1],\r\n                        ender: -1,\r\n                        lexer: \"markdown\",\r\n                        lines: 1,\r\n                        stack: parse.structure[parse.structure.length - 1][0],\r\n                        token: content,\r\n                        types: \"content\"\r\n                    }, \"\");\r\n                }\r\n                if (listrecurse === true) {\r\n                    list();\r\n                }\r\n                if (tag !== \"multiline\") {\r\n                    parse.push(data, {\r\n                        begin: parse.structure[parse.structure.length - 1][1],\r\n                        ender: -1,\r\n                        lexer: \"markdown\",\r\n                        lines: 0,\r\n                        stack: parse.structure[parse.structure.length - 1][0],\r\n                        token: headerId(tagend),\r\n                        types: \"end\"\r\n                    }, \"\");\r\n                    quote = \"\";\r\n                    stack = [];\r\n                }\r\n                return;\r\n            }\r\n            if (struct.indexOf(\" \") > 0) {\r\n                struct = struct.slice(0, struct.indexOf(\" \"));\r\n            }\r\n            if (tag !== \"multiline\") {\r\n                parse.push(data, {\r\n                    begin: parse.structure[parse.structure.length - 1][1],\r\n                    ender: -1,\r\n                    lexer: \"markdown\",\r\n                    lines: 0,\r\n                    stack: parse.structure[parse.structure.length - 1][0],\r\n                    token: tag,\r\n                    types: \"start\"\r\n                }, struct);\r\n            }\r\n            if (listrecurse === true) {\r\n                list();\r\n            }\r\n            else {\r\n                parse.push(data, {\r\n                    begin: parse.structure[parse.structure.length - 1][1],\r\n                    ender: -1,\r\n                    lexer: \"markdown\",\r\n                    lines: 0,\r\n                    stack: parse.structure[parse.structure.length - 1][0],\r\n                    token: item.replace(/^(\\s+)/, \"\").replace(/(\\s+)$/, \"\"),\r\n                    types: \"content\"\r\n                }, \"\");\r\n            }\r\n            if (tag !== \"multiline\") {\r\n                parse.push(data, {\r\n                    begin: parse.structure[parse.structure.length - 1][1],\r\n                    ender: -1,\r\n                    lexer: \"markdown\",\r\n                    lines: 0,\r\n                    stack: parse.structure[parse.structure.length - 1][0],\r\n                    token: headerId(tagend),\r\n                    types: \"end\"\r\n                }, \"\");\r\n                quote = \"\";\r\n                stack = [];\r\n            }\r\n        }, comtest = function lexer_markdown_comtest(index) {\r\n            return (/^(\\s{0,3}<!--)/).test(lines[index]);\r\n        }, hrtest = function lexer_markdown_hrtest(index) {\r\n            return (/^(\\s*((-\\s*){3,}|(_\\s*){3,}|(\\*\\s*){3,})\\s*)$/).test(lines[index]);\r\n        }, codetest = function lexer_markdown_codetest(index) {\r\n            return ((/^(\\u0020{4,}\\s*\\S)/).test(lines[index]) === true || (/^(\\s*\\t\\s*\\S)/).test(lines[index]) === true);\r\n        }, codeblocktest = function lexer_markdown_codeblocktest(index) {\r\n            return (/^(\\s{0,3}((`{3,})|(~{3,}))+(\\S+)?\\s*)$/).test(lines[index]);\r\n        }, listtest = function lexer_markdown_listtest(index) {\r\n            const listy = (/^(\\s*(\\*|-|\\+|(\\d{1,9}(\\)|\\.))))/);\r\n            if (listy.test(lines[index]) === true) {\r\n                const listr = lines[index].replace(listy, \"\");\r\n                if (listr === \"\") {\r\n                    lines[index] = lines[index] + \" \";\r\n                }\r\n                else if ((/\\s/).test(listr.charAt(0)) === false) {\r\n                    return false;\r\n                }\r\n                return true;\r\n            }\r\n            return false;\r\n        }, comment = function lexer_markdown_comment() {\r\n            const com = [];\r\n            let comment = \"\";\r\n            if (lines[a].indexOf(\"-->\") < 0) {\r\n                do {\r\n                    com.push(lines[a]);\r\n                    a = a + 1;\r\n                } while (a < b && lines[a].indexOf(\"-->\") < 0);\r\n            }\r\n            else {\r\n                com.push(lines[a]);\r\n            }\r\n            if (options.crlf === true) {\r\n                comment = com.join(\"\\r\\n\").replace(/^(\\s*<!--+\\s*)/, \"\").replace(/\\s*-+->/, \"-->\");\r\n            }\r\n            else {\r\n                comment = com.join(\"\\n\").replace(/^(\\s*<!--+\\s*)/, \"\").replace(/\\s*-+->/, \"-->\");\r\n            }\r\n            comment = comment.slice(0, comment.indexOf(\"-->\"));\r\n            if (lines[a] !== undefined) {\r\n                lines[a] = lines[a].slice(lines[a].indexOf(\"-->\") + 3);\r\n                if (lines[a].replace(/\\s+/, \"\") !== \"\") {\r\n                    a = a - 1;\r\n                }\r\n            }\r\n            parse.push(data, {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"markdown\",\r\n                lines: 0,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: comment,\r\n                types: \"comment\"\r\n            }, \"\");\r\n        }, code = function lexer_markdown_code(codetext, language, fourspace) {\r\n            parse.push(data, {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"markdown\",\r\n                lines: 0,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: \"<p>\",\r\n                types: \"start\"\r\n            }, \"p\");\r\n            parse.push(data, {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"markdown\",\r\n                lines: 0,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: \"<code>\",\r\n                types: \"start\"\r\n            }, \"code\");\r\n            if (language !== \"\") {\r\n                parse.push(data, {\r\n                    begin: parse.structure[parse.structure.length - 1][1],\r\n                    ender: -1,\r\n                    lexer: \"markdown\",\r\n                    lines: 0,\r\n                    stack: parse.structure[parse.structure.length - 1][0],\r\n                    token: \"class=\\\"language-\" + language + \"\\\"\",\r\n                    types: \"attribute\"\r\n                }, \"\");\r\n            }\r\n            if (codetext !== \"\") {\r\n                if (fourspace === true) {\r\n                    if (codetext.indexOf(\"    \") === 0) {\r\n                        codetext = codetext.replace(/^(\\u0020{4})/, \"\");\r\n                    }\r\n                    else {\r\n                        codetext = codetext.replace(/^(\\s*\\t)/, \"\");\r\n                    }\r\n                }\r\n                parse.push(data, {\r\n                    begin: parse.structure[parse.structure.length - 1][1],\r\n                    ender: -1,\r\n                    lexer: \"markdown\",\r\n                    lines: 0,\r\n                    stack: parse.structure[parse.structure.length - 1][0],\r\n                    token: codetext,\r\n                    types: \"content\"\r\n                }, \"\");\r\n            }\r\n            parse.push(data, {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"markdown\",\r\n                lines: 0,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: \"</code>\",\r\n                types: \"end\"\r\n            }, \"\");\r\n            parse.push(data, {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"markdown\",\r\n                lines: 0,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: \"</p>\",\r\n                types: \"end\"\r\n            }, \"\");\r\n        }, codeblock = function lexer_markdown_codeblock(ticks, blockyquote, fourspace) {\r\n            const indentstr = (function lexer_markdown_codeblock() {\r\n                let inumb = (ticks === true)\r\n                    ? (/^(\\s*)/).exec(lines[a])[0].length\r\n                    : 0;\r\n                if (inumb > 3) {\r\n                    return 0;\r\n                }\r\n                return inumb;\r\n            }()), indent = new RegExp(`^(\\\\s{0,${indentstr}})`), open = (function lexer_markdown_codeblock_open() {\r\n                const op = lines[a].replace(/^\\s*/, \"\");\r\n                let aa = 0;\r\n                do {\r\n                    aa = aa + 1;\r\n                } while (op.charAt(aa) === op.charAt(0));\r\n                return op.slice(0, aa);\r\n            }()), language = (ticks === true)\r\n                ? lines[a].replace(/(\\s*((`+)|(~+))\\s*)/, \"\").replace(/(\\s*)/g, \"\")\r\n                : \"\", endgate = new RegExp(`^\\\\s{0,3}${open.charAt(0)}{${open.length},}\\\\s*$`), codes = [];\r\n            if (ticks === true) {\r\n                a = a + 1;\r\n                if (endgate.test(lines[a]) === true) {\r\n                    code(\"\", language, false);\r\n                    return;\r\n                }\r\n            }\r\n            do {\r\n                if (lines[a] === undefined) {\r\n                    break;\r\n                }\r\n                if (ticks === true) {\r\n                    if (endgate.test(lines[a]) === true) {\r\n                        break;\r\n                    }\r\n                    codes.push(lines[a].replace(indent, \"\"));\r\n                }\r\n                else if (lines[a] !== \"\") {\r\n                    codes.push(lines[a].replace(/^(\\u0020{4})/, \"\").replace(/^(\\s*\\t)/, \"\"));\r\n                    if (lines[a + 1] !== \"\" && codetest(a + 1) === false) {\r\n                        break;\r\n                    }\r\n                    if (lines[a + 1] === \"\" && codetest(a + 2) === false) {\r\n                        a = a + 1;\r\n                        break;\r\n                    }\r\n                }\r\n                else {\r\n                    if (codetest(a + 1) === false) {\r\n                        break;\r\n                    }\r\n                    codes.push(\"\");\r\n                }\r\n                if (blockyquote === true && (/^(\\s*>)/).test(lines[a + 1]) === false) {\r\n                    break;\r\n                }\r\n                a = a + 1;\r\n            } while (a < b);\r\n            if (options.crlf === true) {\r\n                code(codes.join(\"\\r\\n\"), language, fourspace);\r\n            }\r\n            else {\r\n                code(codes.join(\"\\n\"), language, fourspace);\r\n            }\r\n        }, parabuild = function lexer_markdown_parabuild() {\r\n            let x = a, tag = \"<p>\";\r\n            const test = function lexer_markdown_parabuild_test(index) {\r\n                if (lines[index] === undefined) {\r\n                    return false;\r\n                }\r\n                if ((/^(\\s{0,3}((=+)|(-+))\\s*)$/).test(lines[index]) === true) {\r\n                    if (lines[index].indexOf(\"=\") > -1) {\r\n                        tag = \"<h1>\";\r\n                    }\r\n                    else {\r\n                        tag = \"<h2>\";\r\n                    }\r\n                    return false;\r\n                }\r\n                if (hrtest(index) === true) {\r\n                    return false;\r\n                }\r\n                if ((/^(\\s*((`{3,})|(~{3,}))+(\\S+)?\\s*)$/).test(lines[index]) === true) {\r\n                    return false;\r\n                }\r\n                if (lines[index] === \"\") {\r\n                    return false;\r\n                }\r\n                if ((/^(\\s*>)/).test(lines[index]) === true) {\r\n                    return false;\r\n                }\r\n                if ((/^(\\s*#{1,6}\\s)/).test(lines[index]) === true) {\r\n                    return false;\r\n                }\r\n                if (listtest(index) === true && parse.structure[parse.structure.length - 1][0] !== \"blockquote\") {\r\n                    return false;\r\n                }\r\n                return true;\r\n            }, fixquote = function lexer_markdown_parabuild_fixquote() {\r\n                let key = \"\", x = parse.count;\r\n                if (quote === \"*\" || quote === \"_\") {\r\n                    key = \"<em>\";\r\n                }\r\n                else if (quote === \"**\" || quote === \"__\") {\r\n                    key = \"<strong>\";\r\n                }\r\n                else if (quote === \"~\") {\r\n                    key = \"<strike>\";\r\n                }\r\n                parse.structure.pop();\r\n                if (data.token[x] !== key) {\r\n                    do {\r\n                        data.begin[x] = parse.structure[parse.structure.length - 1][1];\r\n                        data.stack[x] = parse.structure[parse.structure.length - 1][0];\r\n                        x = x - 1;\r\n                    } while (x > 0 && data.token[x] !== key);\r\n                }\r\n                if (data.types[x + 1] === \"content\") {\r\n                    data.token[x + 1] = `${quote} ${data.token[x + 1]}`;\r\n                    parse.splice({\r\n                        data: data,\r\n                        howmany: 1,\r\n                        index: x\r\n                    });\r\n                }\r\n                else if (data.types[x - 1] === \"content\") {\r\n                    data.token[x - 1] = data.token[x - 1] + quote;\r\n                    parse.splice({\r\n                        data: data,\r\n                        howmany: 1,\r\n                        index: x\r\n                    });\r\n                }\r\n                else {\r\n                    data.token[x] = quote;\r\n                    data.types[x] = \"content\";\r\n                }\r\n                quote = \"\";\r\n            };\r\n            if (test(a + 1) === true) {\r\n                do {\r\n                    x = x + 1;\r\n                } while (x < b && test(x) === true);\r\n                parse.push(data, {\r\n                    begin: parse.structure[parse.structure.length - 1][1],\r\n                    ender: -1,\r\n                    lexer: \"markdown\",\r\n                    lines: 0,\r\n                    stack: parse.structure[parse.structure.length - 1][0],\r\n                    token: tag,\r\n                    types: \"start\"\r\n                }, tag.replace(\"<\", \"\").replace(\">\", \"\"));\r\n                if (x === a + 1) {\r\n                    text(lines[a], tag, false);\r\n                }\r\n                else {\r\n                    do {\r\n                        text(lines[a], \"multiline\", false);\r\n                        parse.push(data, {\r\n                            begin: parse.structure[parse.structure.length - 1][1],\r\n                            ender: -1,\r\n                            lexer: \"markdown\",\r\n                            lines: 0,\r\n                            stack: parse.structure[parse.structure.length - 1][0],\r\n                            token: \"<br/>\",\r\n                            types: \"singleton\"\r\n                        }, \"\");\r\n                        a = a + 1;\r\n                    } while (a < x);\r\n                    parse.pop(data);\r\n                    if (quote !== \"\") {\r\n                        fixquote();\r\n                    }\r\n                    parse.push(data, {\r\n                        begin: parse.structure[parse.structure.length - 1][1],\r\n                        ender: -1,\r\n                        lexer: \"markdown\",\r\n                        lines: 0,\r\n                        stack: parse.structure[parse.structure.length - 1][0],\r\n                        token: tag.replace(\"<\", \"</\"),\r\n                        types: \"end\"\r\n                    }, \"\");\r\n                }\r\n            }\r\n            else {\r\n                text(lines[a], tag, false);\r\n                if (tag !== \"<p>\") {\r\n                    a = a + 1;\r\n                }\r\n            }\r\n            quote = \"\";\r\n            stack = [];\r\n        }, heading = function lexer_markdown_heading() {\r\n            let hash = (/^(\\s*#+\\s+)/).exec(lines[a])[0].replace(/\\s+/g, \"\"), hashes = function lexer_markdown_heading_hasheds(escapes) {\r\n                return escapes.replace(/\\\\/g, \"\").replace(/\\s+/g, \"\");\r\n            }, content = lines[a].replace(/^(\\s*#+\\s+)/, \"\").replace(/(\\s+#+\\s*)$/, \"\").replace(/((\\\\?#)+\\s*)$/, hashes);\r\n            if (content === \"\" || (/^(#+)$/).test(content) === true) {\r\n                parse.push(data, {\r\n                    begin: parse.structure[parse.structure.length - 1][1],\r\n                    ender: -1,\r\n                    lexer: \"markdown\",\r\n                    lines: 0,\r\n                    stack: parse.structure[parse.structure.length - 1][0],\r\n                    token: \"<h\" + hash.length + \">\",\r\n                    types: \"start\"\r\n                }, \"h\" + hash.length);\r\n                parse.push(data, {\r\n                    begin: parse.structure[parse.structure.length - 1][1],\r\n                    ender: -1,\r\n                    lexer: \"markdown\",\r\n                    lines: 0,\r\n                    stack: parse.structure[parse.structure.length - 1][0],\r\n                    token: \"</h\" + hash.length + \">\",\r\n                    types: \"end\"\r\n                }, \"\");\r\n            }\r\n            else {\r\n                text(content, \"<h\" + hash.length + \">\", false);\r\n            }\r\n        }, blockquote = function lexer_markdown_blockquote() {\r\n            let x = a;\r\n            bc1 = bc1 + 1;\r\n            bc2 = bc1;\r\n            parse.push(data, {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"markdown\",\r\n                lines: 0,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: \"<blockquote>\",\r\n                types: \"start\"\r\n            }, \"blockquote\");\r\n            do {\r\n                lines[x] = lines[x].replace(/^(\\s*>\\u0020?)/, \"\");\r\n                if (listtest(x + 1) === true) {\r\n                    break;\r\n                }\r\n                if (lines[x].replace(/\\s+/, \"\") === \"\") {\r\n                    lines[x] = \"\";\r\n                    if ((/^(\\s*>)/).test(lines[x + 1]) === false) {\r\n                        break;\r\n                    }\r\n                }\r\n                if ((/^(\\s{0,3}((-{3,})|(={3,}))\\s*)$/).test(lines[x + 1]) === true) {\r\n                    break;\r\n                }\r\n                x = x + 1;\r\n            } while (x < b && lines[x] !== \"\" && codetest(x) === false && hrtest(x) === false);\r\n            if (x < b - 1 && x > 0) {\r\n                if (listtest(x) === true) {\r\n                    lines.splice(x + 1, 0, \"\");\r\n                    b = b + 1;\r\n                }\r\n                else if (lines[x].replace(/\\s+/, \"\") !== \"\") {\r\n                    x = x - 1;\r\n                }\r\n            }\r\n            do {\r\n                if ((/^(\\s*>)/).test(lines[a]) === true) {\r\n                    blockquote();\r\n                }\r\n                else if ((/^(\\s*((`{3,})|(~{3,}))+(\\S+)?\\s*)$/).test(lines[a]) === true) {\r\n                    if (a + 1 < x) {\r\n                        parse.push(data, {\r\n                            begin: parse.structure[parse.structure.length - 1][1],\r\n                            ender: -1,\r\n                            lexer: \"markdown\",\r\n                            lines: 0,\r\n                            stack: parse.structure[parse.structure.length - 1][0],\r\n                            token: \"<p>\",\r\n                            types: \"start\"\r\n                        }, \"p\");\r\n                        parse.push(data, {\r\n                            begin: parse.structure[parse.structure.length - 1][1],\r\n                            ender: -1,\r\n                            lexer: \"markdown\",\r\n                            lines: 0,\r\n                            stack: parse.structure[parse.structure.length - 1][0],\r\n                            token: \"<code>\",\r\n                            types: \"start\"\r\n                        }, \"code\");\r\n                        parse.push(data, {\r\n                            begin: parse.structure[parse.structure.length - 1][1],\r\n                            ender: -1,\r\n                            lexer: \"markdown\",\r\n                            lines: 0,\r\n                            stack: parse.structure[parse.structure.length - 1][0],\r\n                            token: \"</code>\",\r\n                            types: \"end\"\r\n                        }, \"\");\r\n                        parse.push(data, {\r\n                            begin: parse.structure[parse.structure.length - 1][1],\r\n                            ender: -1,\r\n                            lexer: \"markdown\",\r\n                            lines: 0,\r\n                            stack: parse.structure[parse.structure.length - 1][0],\r\n                            token: \"</p>\",\r\n                            types: \"end\"\r\n                        }, \"\");\r\n                        lines[a] = \"\";\r\n                        break;\r\n                    }\r\n                    codeblock(true, true, false);\r\n                }\r\n                else if (codetest(a) === true) {\r\n                    codeblock(false, true, true);\r\n                }\r\n                else if ((/^(\\s*#{1,6}\\s)/).test(lines[a]) === true) {\r\n                    heading();\r\n                }\r\n                else if (listtest(a) === true) {\r\n                    list();\r\n                }\r\n                else if (a > x && (/^(\\s{0,3}((-{3,})|(={3,}))\\s*)$/).test(lines[a + 1]) === true) {\r\n                    text(lines[a], \"<p>\", false);\r\n                }\r\n                else if (lines[a].replace(/\\s+/, \"\") !== \"\") {\r\n                    parabuild();\r\n                }\r\n                a = a + 1;\r\n            } while (a < x);\r\n            if (lines[a - 1] === \"\" || lines[a] !== \"\" || (a > x && (/^(\\s{0,3}((-{3,})|(={3,}))\\s*)$/).test(lines[a]) === true)) {\r\n                a = a - 1;\r\n            }\r\n            bc1 = bc1 - 1;\r\n            if (bc1 === 0) {\r\n                do {\r\n                    parse.push(data, {\r\n                        begin: parse.structure[parse.structure.length - 1][1],\r\n                        ender: -1,\r\n                        lexer: \"markdown\",\r\n                        lines: 0,\r\n                        stack: parse.structure[parse.structure.length - 1][0],\r\n                        token: \"</blockquote>\",\r\n                        types: \"end\"\r\n                    }, \"\");\r\n                    bc2 = bc2 - 1;\r\n                } while (bc2 > 0);\r\n            }\r\n        }, list = function lexer_markdown_list() {\r\n            let paraForce = false, ind = 0, sym = lines[a].replace(/^(\\s+)/, \"\").charAt(0), record = {\r\n                begin: -1,\r\n                ender: -1,\r\n                lexer: \"markdown\",\r\n                lines: 0,\r\n                stack: \"\",\r\n                token: \"\",\r\n                types: \"\"\r\n            }, numb = \"\", lasttext = \"\", y = 0, z = 0, order = false, end;\r\n            const tabs = function lexer_markdown_list_tabs(spaces) {\r\n                let output = spaces.split(\"\"), uu = 0;\r\n                const tt = output.length;\r\n                do {\r\n                    if (output[uu] === \"\\t\") {\r\n                        output[uu] = \"    \";\r\n                    }\r\n                    uu = uu + 1;\r\n                } while (uu < tt);\r\n                return output.join(\"\");\r\n            }, checktest = function lexer_markdown_list_checktest() {\r\n                return ((/^(\\s*(\\*|-|\\+)?\\s{0,3}\\[( |x)\\]\\s*)$/).test(lines[a]) === true || (/^(\\s*(\\*|-|\\+)?\\s{0,3}\\[( |x)\\]\\s+\\S)/).test(lines[a]) === true);\r\n            }, indentation = (/^(\\s*(\\*|-|\\+)?\\s*)/), indlen = function lexer_markdown_list_indlen(index) {\r\n                if (lines[index] === undefined) {\r\n                    return 0;\r\n                }\r\n                return indentation.exec(lines[index].replace(indentation, tabs))[0].length;\r\n            }, space = function lexer_markdown_list_space(index, emptyLine) {\r\n                let xind = indlen(index), xsym = (lines[index] === undefined)\r\n                    ? \"\"\r\n                    : lines[index].replace(/^(\\s+)/, \"\").charAt(0);\r\n                if (lines[index] === undefined) {\r\n                    return 0;\r\n                }\r\n                if (order === true) {\r\n                    xind = (/(^(\\s*(\\d+(\\)|\\.)))?\\s*)/).exec(lines[index])[0].length;\r\n                    xsym = lines[index].replace(/^(\\s*\\d+)/, \"\").charAt(0);\r\n                }\r\n                if (order === false && \"*-+\".indexOf(xsym) > -1 && xsym !== sym && xind - ind < 2 && (/\\s/).test(lines[index].replace(/^(\\s+)/, \"\").charAt(1)) === true) {\r\n                    return -1;\r\n                }\r\n                if (xind - ind < 0) {\r\n                    return xind;\r\n                }\r\n                if (xsym !== sym && listtest(index) === true && (emptyLine === false || (emptyLine === true && xind - ind < 2))) {\r\n                    return 10;\r\n                }\r\n                return xind;\r\n            };\r\n            if ((/^(\\s*\\d{1,9}(\\)|\\.)\\s)/).test(lines[a]) === true) {\r\n                order = true;\r\n                ind = (/(^(\\s*(\\d+(\\)|\\.)))?\\s*)/).exec(lines[a])[0].length;\r\n                sym = lines[a].replace(/^(\\s*\\d+)/, \"\").charAt(0);\r\n                parse.push(data, {\r\n                    begin: parse.structure[parse.structure.length - 1][1],\r\n                    ender: -1,\r\n                    lexer: \"markdown\",\r\n                    lines: 0,\r\n                    stack: parse.structure[parse.structure.length - 1][0],\r\n                    token: \"<ol>\",\r\n                    types: \"start\"\r\n                }, \"ol\");\r\n                numb = (/\\d{1,9}/).exec(lines[a])[0].replace(/^(0+)/, \"\");\r\n                if (numb !== \"1\") {\r\n                    parse.push(data, {\r\n                        begin: parse.structure[parse.structure.length - 1][1],\r\n                        ender: -1,\r\n                        lexer: \"markdown\",\r\n                        lines: 0,\r\n                        stack: parse.structure[parse.structure.length - 1][0],\r\n                        token: \"start=\\\"\" + numb + \"\\\"\",\r\n                        types: \"attribute\"\r\n                    }, \"\");\r\n                }\r\n            }\r\n            else {\r\n                ind = indlen(a);\r\n                parse.push(data, {\r\n                    begin: parse.structure[parse.structure.length - 1][1],\r\n                    ender: -1,\r\n                    lexer: \"markdown\",\r\n                    lines: 0,\r\n                    stack: parse.structure[parse.structure.length - 1][0],\r\n                    token: \"<ul>\",\r\n                    types: \"start\"\r\n                }, \"ul\");\r\n            }\r\n            do {\r\n                paraForce = false;\r\n                // lists do not contain comments\r\n                if (comtest(a) === true) {\r\n                    a = a - 1;\r\n                    break;\r\n                }\r\n                // an ordered list may not have unordered list items\r\n                if (order === true && (/^(\\s{0,3}(\\*|-|\\+)\\s)/).test(lines[a]) === true) {\r\n                    if (frontspace(a) !== \"\") {\r\n                        lexer_markdown_list();\r\n                        record.begin = parse.structure[parse.structure.length - 1][1];\r\n                        record.stack = parse.structure[parse.structure.length - 1][0];\r\n                        record.token = \"</li>\";\r\n                        record.types = \"end\";\r\n                        parse.push(data, record, \"\");\r\n                    }\r\n                    else {\r\n                        lines.splice(a, 0, \"\");\r\n                        b = b + 1;\r\n                        break;\r\n                    }\r\n                }\r\n                // an unordered list may not have ordered list items\r\n                if (order === false && (/^(\\s{0,3}\\d{1,9}(\\)|\\.)\\s)/).test(lines[a]) === true) {\r\n                    if (frontspace(a) !== \"\") {\r\n                        lexer_markdown_list();\r\n                        record.begin = parse.structure[parse.structure.length - 1][1];\r\n                        record.stack = parse.structure[parse.structure.length - 1][0];\r\n                        record.token = \"</li>\";\r\n                        record.types = \"end\";\r\n                        parse.push(data, record, \"\");\r\n                    }\r\n                    else {\r\n                        lines.splice(a, 0, \"\");\r\n                        b = b + 1;\r\n                        break;\r\n                    }\r\n                }\r\n                numb = lines[a];\r\n                lines[a] = lines[a].replace(/^(\\s*(\\*|-|\\+|(\\d{1,9}\\.))\\s+)/, \"\");\r\n                //recursive list item\r\n                if (listtest(a) === true) {\r\n                    parse.structure.push([\"ul\", parse.count - 3]);\r\n                    lexer_markdown_list();\r\n                    record.begin = parse.structure[parse.structure.length - 1][1];\r\n                    record.stack = parse.structure[parse.structure.length - 1][0];\r\n                    record.token = \"<li>\";\r\n                    record.types = \"start\";\r\n                    y = parse.count - 1;\r\n                    do {\r\n                        data.begin[y] = data.begin[y] - 1;\r\n                        y = y - 1;\r\n                    } while (y > 0 && data.token[y + 1] !== \"<li>\");\r\n                    parse.splice({\r\n                        data: data,\r\n                        howmany: 0,\r\n                        index: y,\r\n                        record: record\r\n                    });\r\n                    y = y + 1;\r\n                    do {\r\n                        if (data.types[y] === \"start\") {\r\n                            data.begin[y] = y - 1;\r\n                            data.stack[y] = data.token[y - 1].replace(\"<\", \"\").replace(\">\", \"\");\r\n                            z = y;\r\n                        }\r\n                        else {\r\n                            data.begin[y] = z;\r\n                            if (data.types[y] === \"end\") {\r\n                                z = z - 1;\r\n                            }\r\n                        }\r\n                        y = y + 1;\r\n                    } while (y < parse.count + 1);\r\n                    record.begin = z;\r\n                    record.stack = \"li\";\r\n                    record.token = \"</li>\";\r\n                    record.types = \"end\";\r\n                    parse.push(data, record, \"\");\r\n                }\r\n                else if (lines[a] === \"\") {\r\n                    y = space(a + 1, true) - ind;\r\n                    if (y < 0) {\r\n                        break;\r\n                    }\r\n                    if (y > 1 && a < b - 1 && lines[a + 1].replace(/\\s+/, \"\").charAt(0) !== sym && (/^(\\s{0,3}>)/).test(lines[a + 1]) === false) {\r\n                        paraForce = true;\r\n                    }\r\n                    else if (codetest(a + 1) === false && (parse.structure.join(\"\").indexOf(\"blockquote\") > 0 || y !== 0) && a < b - 1) {\r\n                        break;\r\n                    }\r\n                }\r\n                else {\r\n                    lines[a] = numb;\r\n                    y = space(a, false) - ind;\r\n                    if (y < -1 || y > 9 || hrtest(a) === true) {\r\n                        z = (lines[a + 1] === \"\")\r\n                            ? a + 2\r\n                            : a + 1;\r\n                        if (z !== b && codetest(z) === false && listtest(z) === false && (/^\\s*>/).test(lines[a]) === false && lines[a + 1] !== \"\") {\r\n                            a = a - 1;\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (data.token[parse.count - 1] === \"<li>\") {\r\n                        paraForce = false;\r\n                        if (lines[a - 1] === \"\") {\r\n                            a = a - 1;\r\n                            break;\r\n                        }\r\n                    }\r\n                    else if (y < 1 && listtest(a) === false) {\r\n                        paraForce = true;\r\n                        y = 2;\r\n                    }\r\n                    if ((/^(\\s*(\\*|-|\\+|(\\d{1,9}(\\)|\\.)))\\s*)$/).test(lines[a]) === true && lines[a + 1] === \"\") {\r\n                        record.begin = parse.structure[parse.structure.length - 1][1];\r\n                        record.stack = parse.structure[parse.structure.length - 1][0];\r\n                        record.token = \"<li>\";\r\n                        record.types = \"start\";\r\n                        parse.push(data, record, \"li\");\r\n                        record.begin = parse.structure[parse.structure.length - 1][1];\r\n                        record.stack = parse.structure[parse.structure.length - 1][0];\r\n                        record.token = \"</li>\";\r\n                        record.types = \"end\";\r\n                        parse.push(data, record, \"\");\r\n                    }\r\n                    else if (y < -1) {\r\n                        //different list type\r\n                        lines.splice(a, 0, \"\");\r\n                        b = b + 1;\r\n                        break;\r\n                    }\r\n                    else if (y > 1) {\r\n                        if ((/^(\\s*>)/).test(lines[a]) === true) {\r\n                            //blockquote in list item\r\n                            end = parse.pop(data);\r\n                            record.begin = end.begin;\r\n                            record.stack = end.stack;\r\n                            parse.structure.push([end.stack, end.begin]);\r\n                            blockquote();\r\n                            record.begin = parse.structure[parse.structure.length - 1][1];\r\n                            record.stack = parse.structure[parse.structure.length - 1][0];\r\n                            record.token = \"</li>\";\r\n                            record.types = \"end\";\r\n                            parse.push(data, record, \"\");\r\n                        }\r\n                        else if (listtest(a) === true && (/^(\\u0020{4,}\\s*\\S)/).test(lines[a].replace(/^(\\s*(\\*|-|\\+|(\\d{1,9}(\\)|\\.)))\\s)/, \"\").replace(/^\\t/, \"    \")) === true) {\r\n                            //code line in list item\r\n                            record.begin = parse.structure[parse.structure.length - 1][1];\r\n                            record.stack = parse.structure[parse.structure.length - 1][0];\r\n                            record.token = \"<li>\";\r\n                            record.types = \"start\";\r\n                            parse.push(data, record, \"li\");\r\n                            lines[a] = lines[a].replace(/^(\\s*(\\*|-|\\+|(\\d{1,9}(\\)|\\.)))\\s)/, \"\").replace(/^\\t/, \"    \");\r\n                            code(lines[a], \"\", true);\r\n                            record.begin = parse.structure[parse.structure.length - 1][1];\r\n                            record.stack = parse.structure[parse.structure.length - 1][0];\r\n                            record.token = \"</li>\";\r\n                            record.types = \"end\";\r\n                            parse.push(data, record, \"\");\r\n                        }\r\n                        else if (paraForce || (codetest(a) === true && listtest(a) === false)) {\r\n                            end = parse.pop(data);\r\n                            record.begin = end.begin;\r\n                            record.stack = end.stack;\r\n                            parse.structure.push([end.stack, end.begin]);\r\n                            if (lines[a - 1] === \"\" && data.token[parse.count] !== \"</p>\") {\r\n                                lasttext = data.token[parse.count];\r\n                                parse.pop(data);\r\n                                record.token = \"<p>\";\r\n                                record.types = \"start\";\r\n                                parse.push(data, record, \"p\");\r\n                                record.begin = parse.structure[parse.structure.length - 1][1];\r\n                                record.stack = parse.structure[parse.structure.length - 1][0];\r\n                                record.token = lasttext;\r\n                                record.types = \"content\";\r\n                                parse.push(data, record, \"\");\r\n                                record.token = \"</p>\";\r\n                                record.types = \"end\";\r\n                                parse.push(data, record, \"\");\r\n                            }\r\n                            lines[a] = lines[a].replace(/^(\\u0020{4})/, \"\").replace(/^(\\s*\\t)/, \"\");\r\n                            if (codetest(a) === true) {\r\n                                code(lines[a], \"\", true);\r\n                            }\r\n                            else if (data.token[parse.count] === \"</p>\" && lines[a - 1] !== \"\") {\r\n                                parse.pop(data);\r\n                                parse.structure.push([\"p\", data.begin[parse.count]]);\r\n                                record.begin = parse.structure[parse.structure.length - 1][1];\r\n                                record.stack = parse.structure[parse.structure.length - 1][0];\r\n                                record.token = \"<br/>\";\r\n                                record.types = \"singleton\";\r\n                                parse.push(data, record, \"\");\r\n                                text(lines[a].replace(/^(\\s*(\\*|-|\\+|(\\d{1,9}\\.))\\s+)/, \"\"), \"multiline\", false);\r\n                                record.token = \"</p>\";\r\n                                record.types = \"end\";\r\n                                parse.push(data, record, \"\");\r\n                            }\r\n                            else if (data.types[parse.count] === \"content\") {\r\n                                a = a - 1;\r\n                                parse.pop(data);\r\n                                record.token = \"<p>\";\r\n                                record.types = \"start\";\r\n                                record.begin = parse.structure[parse.structure.length - 1][1];\r\n                                record.stack = parse.structure[parse.structure.length - 1][0];\r\n                                parse.push(data, record, \"p\");\r\n                                record.begin = parse.structure[parse.structure.length - 1][1];\r\n                                record.stack = parse.structure[parse.structure.length - 1][0];\r\n                                text(lines[a].replace(/^(\\s*(\\*|-|\\+|(\\d{1,9}\\.))\\s+)/, \"\"), \"multiline\", false);\r\n                                record.token = \"<br/>\";\r\n                                record.types = \"singleton\";\r\n                                parse.push(data, record, \"\");\r\n                                a = a + 1;\r\n                                text(lines[a].replace(/^(\\s*(\\*|-|\\+|(\\d{1,9}\\.))\\s+)/, \"\"), \"multiline\", false);\r\n                                record.token = \"</p>\";\r\n                                record.types = \"end\";\r\n                                parse.push(data, record, \"\");\r\n                            }\r\n                            else {\r\n                                text(lines[a], \"<p>\", false);\r\n                            }\r\n                            parse.push(data, end, \"\");\r\n                        }\r\n                        else if (listtest(a) === true) {\r\n                            lexer_markdown_list();\r\n                            record.begin = parse.structure[parse.structure.length - 1][1];\r\n                            record.stack = parse.structure[parse.structure.length - 1][0];\r\n                            record.token = \"</li>\";\r\n                            record.types = \"end\";\r\n                            parse.push(data, record, \"\");\r\n                        }\r\n                    }\r\n                    else if ((/^(\\s*((`{3,})|(~{3,}))+(\\S+)?\\s*)$/).test(lines[a].replace(/^(\\s*(\\*|-|\\+|(\\d{1,9}(\\)|\\.)))\\s)/, \"\")) === true) {\r\n                        record.begin = parse.structure[parse.structure.length - 1][1];\r\n                        record.stack = parse.structure[parse.structure.length - 1][0];\r\n                        record.token = \"<li>\";\r\n                        record.types = \"start\";\r\n                        parse.push(data, record, \"li\");\r\n                        lines[a] = lines[a].replace(/^(\\s*(\\*|-|\\+|(\\d{1,9}(\\)|\\.)))\\s)/, \"\");\r\n                        codeblock(true, false, false);\r\n                        record.begin = parse.structure[parse.structure.length - 1][1];\r\n                        record.stack = parse.structure[parse.structure.length - 1][0];\r\n                        record.token = \"</li>\";\r\n                        record.types = \"end\";\r\n                        parse.push(data, record, \"\");\r\n                    }\r\n                    else if (checktest() === true || (listtest(a + 1) === true && space(a + 1, false) - space(a, false) > 1)) {\r\n                        record.begin = parse.structure[parse.structure.length - 1][1];\r\n                        record.stack = parse.structure[parse.structure.length - 1][0];\r\n                        record.token = \"<li>\";\r\n                        record.types = \"start\";\r\n                        parse.push(data, record, \"li\");\r\n                        if (checktest() === true) {\r\n                            if (data.types[parse.structure[parse.structure.length - 2][1] + 1] !== \"attribute\") {\r\n                                const index = parse.structure[parse.structure.length - 2][1] + 1;\r\n                                parse.structure[parse.structure.length - 1][1] = parse.structure[parse.structure.length - 1][1] + 1;\r\n                                if (parse.count > index) {\r\n                                    const parent = index - 1;\r\n                                    let aa = parse.count;\r\n                                    do {\r\n                                        aa = aa - 1;\r\n                                        if (data.begin[aa] !== parent) {\r\n                                            data.begin[aa] = data.begin[aa] + 1;\r\n                                        }\r\n                                        data.ender[aa] = data.ender[aa] + 1;\r\n                                    } while (aa > index);\r\n                                }\r\n                                parse.splice({\r\n                                    data: data,\r\n                                    howmany: 0,\r\n                                    index: index,\r\n                                    record: {\r\n                                        begin: parse.structure[parse.structure.length - 2][1],\r\n                                        ender: -1,\r\n                                        lexer: \"markdown\",\r\n                                        lines: 0,\r\n                                        stack: parse.structure[parse.structure.length - 2][0],\r\n                                        token: \"class=\\\"contains-task-list\\\"\",\r\n                                        types: \"attribute\"\r\n                                    }\r\n                                });\r\n                            }\r\n                            record.begin = parse.structure[parse.structure.length - 1][1];\r\n                            record.stack = parse.structure[parse.structure.length - 1][0];\r\n                            record.token = \"class=\\\"task-list-item\\\"\";\r\n                            record.types = \"attribute\";\r\n                            parse.push(data, record, \"\");\r\n                            record.begin = parse.structure[parse.structure.length - 1][1];\r\n                            record.stack = parse.structure[parse.structure.length - 1][0];\r\n                            record.token = \"<input/>\";\r\n                            record.types = \"singleton\";\r\n                            parse.push(data, record, \"\");\r\n                            y = parse.count;\r\n                            record.begin = y;\r\n                            record.stack = \"input\";\r\n                            record.token = \"class=\\\"task-list-item-checkbox\\\"\";\r\n                            record.types = \"attribute\";\r\n                            parse.push(data, record, \"\");\r\n                            record.begin = y;\r\n                            record.stack = \"input\";\r\n                            record.token = \"disabled=\\\"disabled\\\"\";\r\n                            record.types = \"attribute\";\r\n                            parse.push(data, record, \"\");\r\n                            y = lines[a].indexOf(\"[x]\");\r\n                            z = lines[a].indexOf(\"[ ]\");\r\n                            if (y > -1 && z > -1) {\r\n                                if (y < z) {\r\n                                    lines[a] = lines[a].replace(/(\\[x\\]\\s*)/, \"\");\r\n                                    record.begin = data.begin[parse.count - 1];\r\n                                    record.stack = \"input\";\r\n                                    record.token = \"checked=\\\"checked\\\"\";\r\n                                    record.types = \"attribute\";\r\n                                    parse.push(data, record, \"\");\r\n                                }\r\n                                else {\r\n                                    lines[a] = lines[a].replace(/(\\[ \\]\\s*)/, \"\");\r\n                                }\r\n                            }\r\n                            else if (y > -1) {\r\n                                lines[a] = lines[a].replace(/(\\[x\\]\\s*)/, \"\");\r\n                                record.begin = data.begin[parse.count - 1];\r\n                                record.stack = \"input\";\r\n                                record.token = \"checked=\\\"checked\\\"\";\r\n                                record.types = \"attribute\";\r\n                                parse.push(data, record, \"\");\r\n                            }\r\n                            else {\r\n                                lines[a] = lines[a].replace(/(\\[ \\]\\s*)/, \"\");\r\n                            }\r\n                        }\r\n                        lines[a] = lines[a].replace(/^(\\s*(\\*|-|\\+|(\\d{1,9}\\.))\\s+)/, \"\");\r\n                        text(lines[a], \"multiline\", false);\r\n                        if (listtest(a + 1) === false || a > b - 1 || frontspace(a) === frontspace(a + 1)) {\r\n                            record.begin = parse.structure[parse.structure.length - 1][1];\r\n                            record.stack = parse.structure[parse.structure.length - 1][0];\r\n                            record.token = \"</li>\";\r\n                            record.types = \"end\";\r\n                            parse.push(data, record, \"\");\r\n                        }\r\n                    }\r\n                    else {\r\n                        lines[a] = lines[a].replace(/^(\\s*(\\*|-|\\+|(\\d{1,9}\\.))\\s+)/, \"\");\r\n                        text(lines[a], \"<li>\", false);\r\n                    }\r\n                }\r\n                a = a + 1;\r\n            } while (a < b);\r\n            if (lines[a] === \"\" || listtest(a + 1) === false) {\r\n                if (order === true) {\r\n                    parse.push(data, {\r\n                        begin: parse.structure[parse.structure.length - 1][1],\r\n                        ender: -1,\r\n                        lexer: \"markdown\",\r\n                        lines: 0,\r\n                        stack: parse.structure[parse.structure.length - 1][0],\r\n                        token: \"</ol>\",\r\n                        types: \"end\"\r\n                    }, \"\");\r\n                }\r\n                else {\r\n                    parse.push(data, {\r\n                        begin: parse.structure[parse.structure.length - 1][1],\r\n                        ender: -1,\r\n                        lexer: \"markdown\",\r\n                        lines: 0,\r\n                        stack: parse.structure[parse.structure.length - 1][0],\r\n                        token: \"</ul>\",\r\n                        types: \"end\"\r\n                    }, \"\");\r\n                }\r\n            }\r\n        }, table = function lexer_markdown_table() {\r\n            let c = 0, d = 0, line = lines[a]\r\n                .replace(/^\\|/, \"\")\r\n                .replace(/\\|$/, \"\")\r\n                .replace(/\\\\\\|/g, \"parse\\\\?sep\")\r\n                .split(\"|\"), bar = lines[a + 1]\r\n                .replace(/(\\s*)/g, \"\")\r\n                .replace(/^\\|/, \"\")\r\n                .replace(/\\|$/, \"\")\r\n                .split(\"|\");\r\n            if (line.length !== bar.length) {\r\n                return parabuild();\r\n            }\r\n            parse.push(data, {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"markdown\",\r\n                lines: 0,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: \"<table>\",\r\n                types: \"start\"\r\n            }, \"table\");\r\n            parse.push(data, {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"markdown\",\r\n                lines: 0,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: \"<thead>\",\r\n                types: \"start\"\r\n            }, \"thead\");\r\n            parse.push(data, {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"markdown\",\r\n                lines: 0,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: \"<tr>\",\r\n                types: \"start\"\r\n            }, \"tr\");\r\n            d = line.length;\r\n            do {\r\n                parse.push(data, {\r\n                    begin: parse.structure[parse.structure.length - 1][1],\r\n                    ender: -1,\r\n                    lexer: \"markdown\",\r\n                    lines: 0,\r\n                    stack: parse.structure[parse.structure.length - 1][0],\r\n                    token: \"<th>\",\r\n                    types: \"start\"\r\n                }, \"th\");\r\n                if ((/:-+:/).test(bar[c]) === true) {\r\n                    parse.push(data, {\r\n                        begin: parse.structure[parse.structure.length - 1][1],\r\n                        ender: -1,\r\n                        lexer: \"markdown\",\r\n                        lines: 0,\r\n                        stack: parse.structure[parse.structure.length - 1][0],\r\n                        token: \"style=\\\"text-align:center\\\"\",\r\n                        types: \"attribute\"\r\n                    }, \"\");\r\n                }\r\n                else if ((/:-+/).test(bar[c]) === true) {\r\n                    parse.push(data, {\r\n                        begin: parse.structure[parse.structure.length - 1][1],\r\n                        ender: -1,\r\n                        lexer: \"markdown\",\r\n                        lines: 0,\r\n                        stack: parse.structure[parse.structure.length - 1][0],\r\n                        token: \"style=\\\"text-align:left\\\"\",\r\n                        types: \"attribute\"\r\n                    }, \"\");\r\n                }\r\n                else if ((/-+:/).test(bar[c]) === true) {\r\n                    parse.push(data, {\r\n                        begin: parse.structure[parse.structure.length - 1][1],\r\n                        ender: -1,\r\n                        lexer: \"markdown\",\r\n                        lines: 0,\r\n                        stack: parse.structure[parse.structure.length - 1][0],\r\n                        token: \"style=\\\"text-align:right\\\"\",\r\n                        types: \"attribute\"\r\n                    }, \"\");\r\n                }\r\n                text(line[c].replace(/parse\\\\\\?sep/g, \"|\"), \"multiline\", false);\r\n                quote = \"\";\r\n                stack = [];\r\n                parse.push(data, {\r\n                    begin: parse.structure[parse.structure.length - 1][1],\r\n                    ender: -1,\r\n                    lexer: \"markdown\",\r\n                    lines: 0,\r\n                    stack: parse.structure[parse.structure.length - 1][0],\r\n                    token: \"</th>\",\r\n                    types: \"end\"\r\n                }, \"\");\r\n                c = c + 1;\r\n            } while (c < d);\r\n            parse.push(data, {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"markdown\",\r\n                lines: 0,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: \"</tr>\",\r\n                types: \"end\"\r\n            }, \"\");\r\n            parse.push(data, {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"markdown\",\r\n                lines: 0,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: \"</thead>\",\r\n                types: \"end\"\r\n            }, \"\");\r\n            parse.push(data, {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"markdown\",\r\n                lines: 0,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: \"<tbody>\",\r\n                types: \"start\"\r\n            }, \"tbody\");\r\n            a = a + 2;\r\n            d = bar.length;\r\n            do {\r\n                if (lines[a] === \"\") {\r\n                    break;\r\n                }\r\n                if ((/^(\\s*>)/).test(lines[a]) === true) {\r\n                    if (data.token[parse.count] === \"<tbody>\") {\r\n                        parse.structure.pop();\r\n                        parse.pop(data);\r\n                    }\r\n                    else {\r\n                        parse.push(data, {\r\n                            begin: parse.structure[parse.structure.length - 1][1],\r\n                            ender: -1,\r\n                            lexer: \"markdown\",\r\n                            lines: 0,\r\n                            stack: parse.structure[parse.structure.length - 1][0],\r\n                            token: \"</tbody>\",\r\n                            types: \"end\"\r\n                        }, \"\");\r\n                    }\r\n                    parse.push(data, {\r\n                        begin: parse.structure[parse.structure.length - 1][1],\r\n                        ender: -1,\r\n                        lexer: \"markdown\",\r\n                        lines: 0,\r\n                        stack: parse.structure[parse.structure.length - 1][0],\r\n                        token: \"</table>\",\r\n                        types: \"end\"\r\n                    }, \"\");\r\n                    return blockquote();\r\n                }\r\n                line = lines[a]\r\n                    .replace(/^\\|/, \"\")\r\n                    .replace(/\\|$/, \"\")\r\n                    .replace(/\\\\\\|/g, \"parse\\\\?sep\")\r\n                    .split(\"|\");\r\n                parse.push(data, {\r\n                    begin: parse.structure[parse.structure.length - 1][1],\r\n                    ender: -1,\r\n                    lexer: \"markdown\",\r\n                    lines: 0,\r\n                    stack: parse.structure[parse.structure.length - 1][0],\r\n                    token: \"<tr>\",\r\n                    types: \"start\"\r\n                }, \"tr\");\r\n                c = 0;\r\n                do {\r\n                    if (line[c] === undefined) {\r\n                        line[c] = \"\";\r\n                    }\r\n                    if (line[c] === \" \" && c === bar.length) {\r\n                        break;\r\n                    }\r\n                    parse.push(data, {\r\n                        begin: parse.structure[parse.structure.length - 1][1],\r\n                        ender: -1,\r\n                        lexer: \"markdown\",\r\n                        lines: 0,\r\n                        stack: parse.structure[parse.structure.length - 1][0],\r\n                        token: \"<td>\",\r\n                        types: \"start\"\r\n                    }, \"td\");\r\n                    if ((/:-+:/).test(bar[c]) === true) {\r\n                        parse.push(data, {\r\n                            begin: parse.structure[parse.structure.length - 1][1],\r\n                            ender: -1,\r\n                            lexer: \"markdown\",\r\n                            lines: 0,\r\n                            stack: parse.structure[parse.structure.length - 1][0],\r\n                            token: \"style=\\\"text-align:center\\\"\",\r\n                            types: \"attribute\"\r\n                        }, \"\");\r\n                    }\r\n                    else if ((/:-+/).test(bar[c]) === true) {\r\n                        parse.push(data, {\r\n                            begin: parse.structure[parse.structure.length - 1][1],\r\n                            ender: -1,\r\n                            lexer: \"markdown\",\r\n                            lines: 0,\r\n                            stack: parse.structure[parse.structure.length - 1][0],\r\n                            token: \"style=\\\"text-align:left\\\"\",\r\n                            types: \"attribute\"\r\n                        }, \"\");\r\n                    }\r\n                    else if ((/-+:/).test(bar[c]) === true) {\r\n                        parse.push(data, {\r\n                            begin: parse.structure[parse.structure.length - 1][1],\r\n                            ender: -1,\r\n                            lexer: \"markdown\",\r\n                            lines: 0,\r\n                            stack: parse.structure[parse.structure.length - 1][0],\r\n                            token: \"style=\\\"text-align:right\\\"\",\r\n                            types: \"attribute\"\r\n                        }, \"\");\r\n                    }\r\n                    if (line[c] !== \"\") {\r\n                        text(line[c].replace(/parse\\\\\\?sep/g, \"|\"), \"multiline\", false);\r\n                    }\r\n                    quote = \"\";\r\n                    stack = [];\r\n                    parse.push(data, {\r\n                        begin: parse.structure[parse.structure.length - 1][1],\r\n                        ender: -1,\r\n                        lexer: \"markdown\",\r\n                        lines: 0,\r\n                        stack: parse.structure[parse.structure.length - 1][0],\r\n                        token: \"</td>\",\r\n                        types: \"end\"\r\n                    }, \"\");\r\n                    c = c + 1;\r\n                } while (c < d);\r\n                parse.push(data, {\r\n                    begin: parse.structure[parse.structure.length - 1][1],\r\n                    ender: -1,\r\n                    lexer: \"markdown\",\r\n                    lines: 0,\r\n                    stack: parse.structure[parse.structure.length - 1][0],\r\n                    token: \"</tr>\",\r\n                    types: \"end\"\r\n                }, \"\");\r\n                a = a + 1;\r\n            } while (a < b);\r\n            if (data.token[parse.count] === \"<tbody>\") {\r\n                parse.structure.pop();\r\n                parse.pop(data);\r\n            }\r\n            else {\r\n                parse.push(data, {\r\n                    begin: parse.structure[parse.structure.length - 1][1],\r\n                    ender: -1,\r\n                    lexer: \"markdown\",\r\n                    lines: 0,\r\n                    stack: parse.structure[parse.structure.length - 1][0],\r\n                    token: \"</tbody>\",\r\n                    types: \"end\"\r\n                }, \"\");\r\n            }\r\n            parse.push(data, {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"markdown\",\r\n                lines: 0,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: \"</table>\",\r\n                types: \"end\"\r\n            }, \"\");\r\n        };\r\n        b = lines.length;\r\n        parse.push(data, {\r\n            begin: parse.structure[parse.structure.length - 1][1],\r\n            ender: -1,\r\n            lexer: \"markdown\",\r\n            lines: 0,\r\n            stack: parse.structure[parse.structure.length - 1][0],\r\n            token: \"<body>\",\r\n            types: \"start\"\r\n        }, \"body\");\r\n        do {\r\n            if ((/^(\\s*)$/).test(lines[a]) === true) {\r\n                if (lines[a - 1] === \"\") {\r\n                    lines.splice(a, 1);\r\n                    b = b - 1;\r\n                    a = a - 1;\r\n                }\r\n                else {\r\n                    lines[a] = \"\";\r\n                }\r\n            }\r\n            else if ((/^(\\s*(\\*|-|\\+|(\\d{1,9}(\\)|\\.))))/).test(lines[a]) === true && lines[a].replace(/^(\\s*(\\*|-|\\+|(\\d{1,9}(\\)|\\.)))\\s*)/, \"\") === \"\") {\r\n                if ((/^(\\u0020{2,})/).test(lines[a + 1]) === true) {\r\n                    lines[a] = lines[a].replace(/(\\s+)$/, \"\") + lines[a + 1].replace(\"  \", \" \");\r\n                    lines.splice(a + 1, 1);\r\n                    b = b - 1;\r\n                }\r\n                else if ((/^(\\t)/).test(lines[a + 1]) === true) {\r\n                    lines[a] = lines[a].replace(/(\\s+)$/, \"\") + lines[a + 1].replace(\"\\t\", \" \");\r\n                    lines.splice(a + 1, 1);\r\n                    b = b - 1;\r\n                }\r\n            }\r\n            a = a + 1;\r\n        } while (a < b);\r\n        a = 0;\r\n        do {\r\n            if (comtest(a) === true) {\r\n                comment();\r\n            }\r\n            else if (codetest(a) === true) {\r\n                if (codetest(a + 1) === true || (lines[a + 1] === \"\" && codetest(a + 2) === true)) {\r\n                    codeblock(false, false, true);\r\n                }\r\n                else {\r\n                    code(lines[a], \"\", true);\r\n                }\r\n            }\r\n            else if (hrtest(a) === true) {\r\n                hr();\r\n            }\r\n            else if ((/^(\\s{0,3}>)/).test(lines[a]) === true) {\r\n                blockquote();\r\n            }\r\n            else if ((/(((:-+)|(-+:)|(:-+:)|(-{2,}))\\s*\\|\\s*)/).test(lines[a + 1]) === true) {\r\n                table();\r\n            }\r\n            else if (codeblocktest(a) === true) {\r\n                codeblock(true, false, false);\r\n            }\r\n            else if ((/^(\\s*#{1,6}\\s)/).test(lines[a]) === true) {\r\n                heading();\r\n            }\r\n            else if (listtest(a) === true) {\r\n                list();\r\n            }\r\n            else if (lines[a] !== \"\" && (/^(\\s+)$/).test(lines[a]) === false) {\r\n                parabuild();\r\n            }\r\n            a = a + 1;\r\n        } while (a < b);\r\n        parse.push(data, {\r\n            begin: parse.structure[parse.structure.length - 1][1],\r\n            ender: -1,\r\n            lexer: \"markdown\",\r\n            lines: 0,\r\n            stack: parse.structure[parse.structure.length - 1][0],\r\n            token: \"</body>\",\r\n            types: \"end\"\r\n        }, \"\");\r\n        return data;\r\n    };\r\n    sparser.lexers.markdown = markdown;\r\n}());\r\n(function script_init() {\r\n    \r\n    const script = function lexer_script(source) {\r\n        let a = 0, ltoke = \"\", ltype = \"\", lword = [], pword = [], lengthb = 0, wordTest = -1, paren = -1, funreferences = [], tempstore, pstack, comment;\r\n        const parse = sparser.parse, data = parse.data, options = sparser.options, sourcemap = [\r\n            0, \"\"\r\n        ], references = parse.references, b = source.length, c = source.split(\"\"), brace = [], classy = [], datatype = [false], \r\n        // identify variable declarations\r\n        vart = {\r\n            count: [],\r\n            index: [],\r\n            len: -1,\r\n            word: []\r\n        }, \r\n        // automatic semicolon insertion\r\n        asi = function lexer_script_asi(isEnd) {\r\n            let aa = 0;\r\n            const next = nextchar(1, false), record = {\r\n                begin: data.begin[parse.count],\r\n                ender: data.begin[parse.count],\r\n                lexer: data.lexer[parse.count],\r\n                lines: data.lines[parse.count],\r\n                stack: data.stack[parse.count],\r\n                token: data.token[parse.count],\r\n                types: data.types[parse.count]\r\n            }, clist = (parse.structure.length === 0)\r\n                ? \"\"\r\n                : parse.structure[parse.structure.length - 1][0];\r\n            if ((/^(\\/(\\/|\\*)\\s*parse-ignore\\u002dstart)/).test(ltoke) === true) {\r\n                return;\r\n            }\r\n            if (ltype === \"start\" || ltype === \"type_start\") {\r\n                return;\r\n            }\r\n            if (options.language === \"json\" || options.language === \"java\" || options.language === \"csharp\") {\r\n                return;\r\n            }\r\n            if (options.language === \"json\" || record.token === \";\" || record.token === \",\" || next === \"{\" || record.stack === \"class\" || record.stack === \"map\" || record.stack === \"attribute\" || clist === \"initializer\" || data.types[record.begin - 1] === \"generic\") {\r\n                return;\r\n            }\r\n            if (record.token === \"}\" && data.stack[record.begin - 1] === \"global\" && data.types[record.begin - 1] !== \"operator\" && record.stack === data.stack[parse.count - 1]) {\r\n                return;\r\n            }\r\n            if (record.stack === \"array\" && record.token !== \"]\") {\r\n                return;\r\n            }\r\n            if (data.token[data.begin[parse.count]] === \"{\" && record.stack === \"data_type\") {\r\n                return;\r\n            }\r\n            if (record.types !== undefined && record.types.indexOf(\"template\") > -1 && record.types.indexOf(\"template_string\") < 0) {\r\n                return;\r\n            }\r\n            if (next === \";\" && isEnd === false) {\r\n                return;\r\n            }\r\n            if (data.lexer[parse.count - 1] !== \"script\" && ((a < b && b === options.source.length - 1) || b < options.source.length - 1)) {\r\n                return;\r\n            }\r\n            if (options.language === \"qml\") {\r\n                if (record.types === \"start\") {\r\n                    return;\r\n                }\r\n                ltoke = (options.correct === true)\r\n                    ? \";\"\r\n                    : \"x;\";\r\n                ltype = \"separator\";\r\n                recordPush(\"\");\r\n                if (next !== \"}\") {\r\n                    blockinsert();\r\n                }\r\n                return;\r\n            }\r\n            if (record.token === \"}\" && (record.stack === \"function\" || record.stack === \"if\" || record.stack === \"else\" || record.stack === \"for\" || record.stack === \"do\" || record.stack === \"while\" || record.stack === \"switch\" || record.stack === \"class\" || record.stack === \"try\" || record.stack === \"catch\" || record.stack === \"finally\" || record.stack === \"block\")) {\r\n                if (record.stack === \"function\" && (data.stack[record.begin - 1] === \"data_type\" || data.types[record.begin - 1] === \"type\")) {\r\n                    aa = record.begin;\r\n                    do {\r\n                        aa = aa - 1;\r\n                    } while (aa > 0 && data.token[aa] !== \")\" && data.stack[aa] !== \"arguments\");\r\n                    aa = data.begin[aa];\r\n                }\r\n                else {\r\n                    aa = data.begin[record.begin - 1];\r\n                }\r\n                if (data.token[aa] === \"(\") {\r\n                    aa = aa - 1;\r\n                    if (data.token[aa - 1] === \"function\") {\r\n                        aa = aa - 1;\r\n                    }\r\n                    if (data.stack[aa - 1] === \"object\" || data.stack[aa - 1] === \"switch\") {\r\n                        return;\r\n                    }\r\n                    if (data.token[aa - 1] !== \"=\" && data.token[aa - 1] !== \"return\" && data.token[aa - 1] !== \":\") {\r\n                        return;\r\n                    }\r\n                }\r\n                else {\r\n                    return;\r\n                }\r\n            }\r\n            if (record.types === \"comment\" ||\r\n                clist === \"method\" ||\r\n                clist === \"paren\" ||\r\n                clist === \"expression\" ||\r\n                clist === \"array\" ||\r\n                clist === \"object\" ||\r\n                (clist === \"switch\" && record.stack !== \"method\" && data.token[data.begin[parse.count]] === \"(\" && data.token[data.begin[parse.count] - 1] !== \"return\" && data.types[data.begin[parse.count] - 1] !== \"operator\")) {\r\n                return;\r\n            }\r\n            if (data.stack[parse.count] === \"expression\" && (data.token[data.begin[parse.count] - 1] !== \"while\" || (data.token[data.begin[parse.count] - 1] === \"while\" && data.stack[data.begin[parse.count] - 2] !== \"do\"))) {\r\n                return;\r\n            }\r\n            if (next !== \"\" && \"=<>+*?|^:&%~,.()]\".indexOf(next) > -1 && isEnd === false) {\r\n                return;\r\n            }\r\n            if (record.types === \"comment\") {\r\n                aa = parse.count;\r\n                do {\r\n                    aa = aa - 1;\r\n                } while (aa > 0 && data.types[aa] === \"comment\");\r\n                if (aa < 1) {\r\n                    return;\r\n                }\r\n                record.token = data.token[aa];\r\n                record.types = data.types[aa];\r\n                record.stack = data.stack[aa];\r\n            }\r\n            if (record.token === undefined || record.types === \"start\" || record.types === \"separator\" || (record.types === \"operator\" && record.token !== \"++\" && record.token !== \"--\") || record.token === \"x}\" || record.token === \"var\" || record.token === \"let\" || record.token === \"const\" || record.token === \"else\" || record.token.indexOf(\"#!/\") === 0 || record.token === \"instanceof\") {\r\n                return;\r\n            }\r\n            if (record.stack === \"method\" && (data.token[record.begin - 1] === \"function\" || data.token[record.begin - 2] === \"function\")) {\r\n                return;\r\n            }\r\n            if (options.lexer_options.script.variable_list === \"list\") {\r\n                vart.index[vart.len] = parse.count;\r\n            }\r\n            ltoke = (options.correct === true)\r\n                ? \";\"\r\n                : \"x;\";\r\n            ltype = \"separator\";\r\n            aa = parse.linesSpace;\r\n            parse.linesSpace = 0;\r\n            recordPush(\"\");\r\n            parse.linesSpace = aa;\r\n            blockinsert();\r\n        }, \r\n        // fixes asi location if inserted after an inserted brace\r\n        asibrace = function lexer_script_asibrace() {\r\n            let aa = parse.count;\r\n            do {\r\n                aa = aa - 1;\r\n            } while (aa > -1 && data.token[aa] === \"x}\");\r\n            if (data.stack[aa] === \"else\") {\r\n                return recordPush(\"\");\r\n            }\r\n            aa = aa + 1;\r\n            parse.splice({\r\n                data: data,\r\n                howmany: 0,\r\n                index: aa,\r\n                record: {\r\n                    begin: data.begin[aa],\r\n                    ender: -1,\r\n                    lexer: \"script\",\r\n                    lines: parse.linesSpace,\r\n                    stack: data.stack[aa],\r\n                    token: ltoke,\r\n                    types: ltype\r\n                }\r\n            });\r\n            recordPush(\"\");\r\n        }, \r\n        // cleans up improperly applied ASI\r\n        asifix = function lexer_script_asifix() {\r\n            let len = parse.count;\r\n            if (data.types[len] === \"comment\") {\r\n                do {\r\n                    len = len - 1;\r\n                } while (len > 0 && data.types[len] === \"comment\");\r\n            }\r\n            if (data.token[len] === \"from\") {\r\n                len = len - 2;\r\n            }\r\n            if (data.token[len] === \"x;\") {\r\n                parse.splice({ data: data, howmany: 1, index: len });\r\n            }\r\n        }, \r\n        // block comments\r\n        blockComment = function lexer_script_blockComment() {\r\n            asi(false);\r\n            if (wordTest > -1) {\r\n                word();\r\n            }\r\n            comment = parse.wrapCommentBlock({\r\n                chars: c,\r\n                end: b,\r\n                lexer: \"script\",\r\n                opening: \"/*\",\r\n                start: a,\r\n                terminator: \"\\u002a/\"\r\n            });\r\n            a = comment[1];\r\n            if (data.token[parse.count] === \"var\" || data.token[parse.count] === \"let\" || data.token[parse.count] === \"const\") {\r\n                tempstore = parse.pop(data);\r\n                recordPush(\"\");\r\n                parse.push(data, tempstore, \"\");\r\n                if (data.lines[parse.count - 2] === 0) {\r\n                    data.lines[parse.count - 2] = data.lines[parse.count];\r\n                }\r\n                data.lines[parse.count] = 0;\r\n            }\r\n            else if (comment[0] !== \"\") {\r\n                ltoke = comment[0];\r\n                ltype = (/^\\/\\*\\s*parse-ignore-start/).test(ltoke)\r\n                    ? \"ignore\"\r\n                    : \"comment\";\r\n                if (ltoke.indexOf(\"# sourceMappingURL=\") === 2) {\r\n                    sourcemap[0] = parse.count + 1;\r\n                    sourcemap[1] = ltoke;\r\n                }\r\n                parse.push(data, {\r\n                    begin: parse.structure[parse.structure.length - 1][1],\r\n                    ender: -1,\r\n                    lexer: \"script\",\r\n                    lines: parse.linesSpace,\r\n                    stack: parse.structure[parse.structure.length - 1][0],\r\n                    token: ltoke,\r\n                    types: ltype\r\n                }, \"\");\r\n            }\r\n            if ((/\\/\\*\\s*global\\s+/).test(data.token[parse.count]) === true && data.types.indexOf(\"word\") < 0) {\r\n                references[0] = data.token[parse.count].replace(/\\/\\*\\s*global\\s+/, \"\").replace(\"\\u002a/\", \"\").replace(/,\\s+/g, \",\").split(\",\");\r\n            }\r\n        }, \r\n        // inserts ending curly brace (where absent)\r\n        blockinsert = function lexer_script_blockinsert() {\r\n            let next = nextchar(5, false), name = \"\";\r\n            const g = parse.count, lines = parse.linesSpace;\r\n            if (options.language === \"json\" || brace.length < 1 || brace[brace.length - 1].charAt(0) !== \"x\" || (/^x?(;|\\}|\\))$/).test(ltoke) === false) {\r\n                return;\r\n            }\r\n            if (data.stack[parse.count] === \"do\" && next === \"while\" && data.token[parse.count] === \"}\") {\r\n                return;\r\n            }\r\n            if (ltoke === \";\" && data.token[g - 1] === \"x{\") {\r\n                name = data.token[data.begin[g - 2] - 1];\r\n                if (data.token[g - 2] === \"do\" || (data.token[g - 2] === \")\" && \"ifforwhilecatch\".indexOf(name) > -1)) {\r\n                    tempstore = parse.pop(data);\r\n                    ltoke = (options.correct === true)\r\n                        ? \"}\"\r\n                        : \"x}\";\r\n                    ltype = \"end\";\r\n                    pstack = parse.structure[parse.structure.length - 1];\r\n                    recordPush(\"\");\r\n                    brace.pop();\r\n                    parse.linesSpace = lines;\r\n                    return;\r\n                }\r\n                // to prevent the semicolon from inserting between the braces --> while (x) {};\r\n                tempstore = parse.pop(data);\r\n                ltoke = (options.correct === true)\r\n                    ? \"}\"\r\n                    : \"x}\";\r\n                ltype = \"end\";\r\n                pstack = parse.structure[parse.structure.length - 1];\r\n                recordPush(\"\");\r\n                brace.pop();\r\n                ltoke = \";\";\r\n                ltype = \"end\";\r\n                parse.push(data, tempstore, \"\");\r\n                parse.linesSpace = lines;\r\n                return;\r\n            }\r\n            ltoke = (options.correct === true)\r\n                ? \"}\"\r\n                : \"x}\";\r\n            ltype = \"end\";\r\n            if (data.token[parse.count] === \"x}\") {\r\n                return;\r\n            }\r\n            if (data.stack[parse.count] === \"if\" && (data.token[parse.count] === \";\" || data.token[parse.count] === \"x;\") && next === \"else\") {\r\n                pstack = parse.structure[parse.structure.length - 1];\r\n                recordPush(\"\");\r\n                brace.pop();\r\n                parse.linesSpace = lines;\r\n                return;\r\n            }\r\n            do {\r\n                pstack = parse.structure[parse.structure.length - 1];\r\n                recordPush(\"\");\r\n                brace.pop();\r\n                if (data.stack[parse.count] === \"do\") {\r\n                    break;\r\n                }\r\n            } while (brace[brace.length - 1] === \"x{\");\r\n            parse.linesSpace = lines;\r\n        }, \r\n        // commaComment ensures that commas immediately precede comments instead of\r\n        // immediately follow\r\n        commaComment = function lexer_script_commacomment() {\r\n            let x = parse.count;\r\n            if (data.stack[x] === \"object\" && options.lexer_options.script.object_sort === true) {\r\n                ltoke = \",\";\r\n                ltype = \"separator\";\r\n                asifix();\r\n                recordPush(\"\");\r\n            }\r\n            else {\r\n                do {\r\n                    x = x - 1;\r\n                } while (x > 0 && data.types[x - 1] === \"comment\");\r\n                parse.splice({\r\n                    data: data,\r\n                    howmany: 0,\r\n                    index: x,\r\n                    record: {\r\n                        begin: data.begin[x],\r\n                        ender: -1,\r\n                        lexer: \"script\",\r\n                        lines: parse.linesSpace,\r\n                        stack: data.stack[x],\r\n                        token: \",\",\r\n                        types: \"separator\"\r\n                    }\r\n                });\r\n                recordPush(\"\");\r\n            }\r\n        }, \r\n        // operations for end types: ), ], }\r\n        end = function lexer_script_end(x) {\r\n            let insert = false, newarr = false;\r\n            const next = nextchar(1, false), count = (data.token[parse.count] === \"(\")\r\n                ? parse.count\r\n                : data.begin[parse.count], newarray = function lexer_script_end_newarray() {\r\n                let arraylen = 0;\r\n                const ar = (data.token[count - 1] === \"Array\"), startar = (ar === true)\r\n                    ? \"[\"\r\n                    : \"{\", endar = (ar === true)\r\n                    ? \"]\"\r\n                    : \"}\", namear = (ar === true)\r\n                    ? \"array\"\r\n                    : \"object\";\r\n                if (ar === true && data.types[parse.count] === \"number\") {\r\n                    arraylen = Number(data.token[parse.count]);\r\n                    tempstore = parse.pop(data);\r\n                }\r\n                tempstore = parse.pop(data);\r\n                tempstore = parse.pop(data);\r\n                tempstore = parse.pop(data);\r\n                parse.structure.pop();\r\n                ltoke = startar;\r\n                ltype = \"start\";\r\n                recordPush(namear);\r\n                if (arraylen > 0) {\r\n                    ltoke = \",\";\r\n                    ltype = \"separator\";\r\n                    do {\r\n                        recordPush(\"\");\r\n                        arraylen = arraylen - 1;\r\n                    } while (arraylen > 0);\r\n                }\r\n                ltoke = endar;\r\n                ltype = \"end\";\r\n                recordPush(\"\");\r\n            };\r\n            if (wordTest > -1) {\r\n                word();\r\n            }\r\n            if (classy.length > 0) {\r\n                if (classy[classy.length - 1] === 0) {\r\n                    classy.pop();\r\n                }\r\n                else {\r\n                    classy[classy.length - 1] = classy[classy.length - 1] - 1;\r\n                }\r\n            }\r\n            if (x === \")\" || x === \"x)\" || x === \"]\") {\r\n                if (options.correct === true) {\r\n                    plusplus();\r\n                }\r\n                asifix();\r\n            }\r\n            if (x === \")\" || x === \"x)\") {\r\n                asi(false);\r\n            }\r\n            if (vart.len > -1) {\r\n                if (x === \"}\" && ((options.lexer_options.script.variable_list === \"list\" && vart.count[vart.len] === 0) || (data.token[parse.count] === \"x;\" && options.lexer_options.script.variable_list === \"each\"))) {\r\n                    vartpop();\r\n                }\r\n                vart.count[vart.len] = vart.count[vart.len] - 1;\r\n                if (vart.count[vart.len] < 0) {\r\n                    vartpop();\r\n                }\r\n            }\r\n            if (ltoke === \",\" && data.stack[parse.count] !== \"initializer\" && ((x === \"]\" && data.token[parse.count - 1] === \"[\") || x === \"}\")) {\r\n                tempstore = parse.pop(data);\r\n            }\r\n            if (x === \")\" || x === \"x)\") {\r\n                ltoke = x;\r\n                if (lword.length > 0) {\r\n                    pword = lword[lword.length - 1];\r\n                    if (pword.length > 1 && next !== \"{\" && (pword[0] === \"if\" || pword[0] === \"for\" || (pword[0] === \"while\" && data.stack[pword[1] - 2] !== undefined && data.stack[pword[1] - 2] !== \"do\") || pword[0] === \"with\")) {\r\n                        insert = true;\r\n                    }\r\n                }\r\n            }\r\n            else if (x === \"]\") {\r\n                ltoke = \"]\";\r\n            }\r\n            else if (x === \"}\") {\r\n                if (ltoke !== \",\" && options.correct === true) {\r\n                    plusplus();\r\n                }\r\n                if (parse.structure.length > 0 && parse.structure[parse.structure.length - 1][0] !== \"object\") {\r\n                    asi(true);\r\n                }\r\n                if (options.lexer_options.script.object_sort === true && parse.structure[parse.structure.length - 1][0] === \"object\") {\r\n                    parse.object_sort(data);\r\n                }\r\n                if (ltype === \"comment\") {\r\n                    ltoke = data.token[parse.count];\r\n                    ltype = data.types[parse.count];\r\n                }\r\n                ltoke = \"}\";\r\n            }\r\n            if (parse.structure[parse.structure.length - 1][0] === \"data_type\") {\r\n                ltype = \"type_end\";\r\n            }\r\n            else {\r\n                ltype = \"end\";\r\n            }\r\n            lword.pop();\r\n            pstack = parse.structure[parse.structure.length - 1];\r\n            if (x === \")\" && options.correct === true && count - parse.count < 2 && (data.token[parse.count] === \"(\" || data.types[parse.count] === \"number\") && (data.token[count - 1] === \"Array\" || data.token[count - 1] === \"Object\") && data.token[count - 2] === \"new\") {\r\n                newarray();\r\n                newarr = true;\r\n            }\r\n            if (brace[brace.length - 1] === \"x{\" && x === \"}\") {\r\n                blockinsert();\r\n                brace.pop();\r\n                if (data.stack[parse.count] !== \"try\") {\r\n                    if (next !== \":\" && next !== \";\" && data.token[data.begin[a] - 1] !== \"?\") {\r\n                        blockinsert();\r\n                    }\r\n                }\r\n                ltoke = \"}\";\r\n            }\r\n            else {\r\n                brace.pop();\r\n            }\r\n            // options.end_comma\r\n            if (options.lexer_options.script.end_comma !== undefined && options.lexer_options.script.end_comma !== \"none\" && parse.structure[parse.structure.length - 1][0] === \"array\" || parse.structure[parse.structure.length - 1][0] === \"object\" || parse.structure[parse.structure.length - 1][0] === \"data_type\") {\r\n                if (options.lexer_options.script.end_comma === \"always\" && data.token[parse.count] !== \",\") {\r\n                    const begin = parse.structure[parse.structure.length - 1][1];\r\n                    let y = parse.count;\r\n                    do {\r\n                        if (data.begin[y] === begin) {\r\n                            if (data.token[y] === \",\") {\r\n                                break;\r\n                            }\r\n                        }\r\n                        else {\r\n                            y = data.begin[y];\r\n                        }\r\n                        y = y - 1;\r\n                    } while (y > begin);\r\n                    if (y > begin) {\r\n                        const type = ltype, toke = ltoke;\r\n                        ltoke = \",\";\r\n                        ltype = \"separator\";\r\n                        recordPush(\"\");\r\n                        ltoke = toke;\r\n                        ltype = type;\r\n                    }\r\n                }\r\n                else if (options.lexer_options.script.end_comma === \"never\" && data.token[parse.count] === \",\") {\r\n                    parse.pop(data);\r\n                }\r\n            }\r\n            if (newarr === false) {\r\n                recordPush(\"\");\r\n                if (ltoke === \"}\" && data.stack[parse.count] !== \"object\" && data.stack[parse.count] !== \"class\" && data.stack[parse.count] !== \"data_type\") {\r\n                    references.pop();\r\n                    blockinsert();\r\n                }\r\n            }\r\n            if (insert === true) {\r\n                ltoke = (options.correct === true)\r\n                    ? \"{\"\r\n                    : \"x{\";\r\n                ltype = \"start\";\r\n                recordPush(pword[0]);\r\n                brace.push(\"x{\");\r\n                pword[1] = parse.count;\r\n            }\r\n            datatype.pop();\r\n            if (parse.structure[parse.structure.length - 1][0] !== \"data_type\") {\r\n                datatype[datatype.length - 1] = false;\r\n            }\r\n        }, \r\n        // the general function is a generic tokenizer start argument contains the\r\n        // token's starting syntax offset argument is length of start minus control\r\n        // chars end is how is to identify where the token ends\r\n        general = function lexer_script_general(starting, ending, type) {\r\n            let ee = 0, escape = false, ext = false, build = [starting], ender = ending.split(\"\"), temp;\r\n            const endlen = ender.length, start = a, qc = (options.lexer_options.script.quote_convert === undefined)\r\n                ? \"none\"\r\n                : options.lexer_options.script.quote_convert, base = a + starting.length, cleanUp = function lexer_script_general_cleanUp() {\r\n                let linesSpace = 0;\r\n                build = [];\r\n                ltype = type;\r\n                ee = a;\r\n                if (type === \"string\" && (/\\s/).test(c[ee + 1]) === true) {\r\n                    linesSpace = 1;\r\n                    do {\r\n                        ee = ee + 1;\r\n                        if (c[ee] === \"\\n\") {\r\n                            linesSpace = linesSpace + 1;\r\n                        }\r\n                    } while (ee < b && (/\\s/).test(c[ee + 1]) === true);\r\n                    parse.linesSpace = linesSpace;\r\n                }\r\n            }, finish = function lexer_script_general_finish() {\r\n                let str = \"\";\r\n                //pads certain template tag delimiters with a space\r\n                const bracketSpace = function lexer_script_general_finish_bracketSpace(input) {\r\n                    if (options.language !== \"javascript\" && options.language !== \"typescript\" && options.language !== \"jsx\" && options.language !== \"tsx\") {\r\n                        const spaceStart = function lexer_script_general_finish_bracketSpace_spaceStart(start) {\r\n                            return start.replace(/\\s*$/, \" \");\r\n                        }, spaceEnd = function lexer_script_general_finish_bracketSpace_spaceStart(end) {\r\n                            return end.replace(/^\\s*/, \" \");\r\n                        };\r\n                        if ((/\\{(#|\\/|(%>)|(%\\]))/).test(input) === true || (/\\}%(>|\\])/).test(input) === true) {\r\n                            return input;\r\n                        }\r\n                        input = input.replace(/\\{((\\{+)|%-?)\\s*/g, spaceStart);\r\n                        input = input.replace(/\\s*((\\}\\}+)|(-?%\\}))/g, spaceEnd);\r\n                        return input;\r\n                    }\r\n                    return input;\r\n                };\r\n                if (starting === \"\\\"\" && qc === \"single\") {\r\n                    build[0] = \"'\";\r\n                    build[build.length - 1] = \"'\";\r\n                }\r\n                else if (starting === \"'\" && qc === \"double\") {\r\n                    build[0] = \"\\\"\";\r\n                    build[build.length - 1] = \"\\\"\";\r\n                }\r\n                else if (escape === true) {\r\n                    str = build[build.length - 1];\r\n                    build.pop();\r\n                    build.pop();\r\n                    build.push(str);\r\n                }\r\n                a = ee;\r\n                if (ending === \"\\n\") {\r\n                    a = a - 1;\r\n                    build.pop();\r\n                }\r\n                ltoke = build.join(\"\");\r\n                if (starting === \"\\\"\" || starting === \"'\" || starting === \"{{\" || starting === \"{%\" || starting === \"{{{\") {\r\n                    ltoke = bracketSpace(ltoke);\r\n                }\r\n                if (starting === \"{%\" || starting === \"{{\") {\r\n                    temp = tname(ltoke);\r\n                    ltype = temp[0];\r\n                    recordPush(temp[1]);\r\n                    return;\r\n                }\r\n                if (type === \"string\") {\r\n                    ltype = \"string\";\r\n                    if (options.language === \"json\") {\r\n                        ltoke = ltoke\r\n                            .replace(/\\u0000/g, \"\\\\u0000\")\r\n                            .replace(/\\u0001/g, \"\\\\u0001\")\r\n                            .replace(/\\u0002/g, \"\\\\u0002\")\r\n                            .replace(/\\u0003/g, \"\\\\u0003\")\r\n                            .replace(/\\u0004/g, \"\\\\u0004\")\r\n                            .replace(/\\u0005/g, \"\\\\u0005\")\r\n                            .replace(/\\u0006/g, \"\\\\u0006\")\r\n                            .replace(/\\u0007/g, \"\\\\u0007\")\r\n                            .replace(/\\u0008/g, \"\\\\u0008\")\r\n                            .replace(/\\u0009/g, \"\\\\u0009\")\r\n                            .replace(/\\u000a/g, \"\\\\u000a\")\r\n                            .replace(/\\u000b/g, \"\\\\u000b\")\r\n                            .replace(/\\u000c/g, \"\\\\u000c\")\r\n                            .replace(/\\u000d/g, \"\\\\u000d\")\r\n                            .replace(/\\u000e/g, \"\\\\u000e\")\r\n                            .replace(/\\u000f/g, \"\\\\u000f\")\r\n                            .replace(/\\u0010/g, \"\\\\u0010\")\r\n                            .replace(/\\u0011/g, \"\\\\u0011\")\r\n                            .replace(/\\u0012/g, \"\\\\u0012\")\r\n                            .replace(/\\u0013/g, \"\\\\u0013\")\r\n                            .replace(/\\u0014/g, \"\\\\u0014\")\r\n                            .replace(/\\u0015/g, \"\\\\u0015\")\r\n                            .replace(/\\u0016/g, \"\\\\u0016\")\r\n                            .replace(/\\u0017/g, \"\\\\u0017\")\r\n                            .replace(/\\u0018/g, \"\\\\u0018\")\r\n                            .replace(/\\u0019/g, \"\\\\u0019\")\r\n                            .replace(/\\u001a/g, \"\\\\u001a\")\r\n                            .replace(/\\u001b/g, \"\\\\u001b\")\r\n                            .replace(/\\u001c/g, \"\\\\u001c\")\r\n                            .replace(/\\u001d/g, \"\\\\u001d\")\r\n                            .replace(/\\u001e/g, \"\\\\u001e\")\r\n                            .replace(/\\u001f/g, \"\\\\u001f\");\r\n                    }\r\n                    else if (starting.indexOf(\"#!\") === 0) {\r\n                        ltoke = ltoke.slice(0, ltoke.length - 1);\r\n                        parse.linesSpace = 2;\r\n                    }\r\n                    else if (parse.structure[parse.structure.length - 1][0] !== \"object\" || (parse.structure[parse.structure.length - 1][0] === \"object\" && nextchar(1, false) !== \":\" && data.token[parse.count] !== \",\" && data.token[parse.count] !== \"{\")) {\r\n                        if ((ltoke.length > options.wrap && options.wrap > 0) || (options.wrap !== 0 && data.token[parse.count] === \"+\" && (data.token[parse.count - 1].charAt(0) === \"\\\"\" || data.token[parse.count - 1].charAt(0) === \"'\"))) {\r\n                            let item = ltoke, q = (qc === \"double\")\r\n                                ? \"\\\"\"\r\n                                : (qc === \"single\")\r\n                                    ? \"'\"\r\n                                    : item.charAt(0), segment = \"\";\r\n                            const limit = options.wrap, uchar = (/u[0-9a-fA-F]{4}/), xchar = (/x[0-9a-fA-F]{2}/);\r\n                            item = item.slice(1, item.length - 1);\r\n                            if (data.token[parse.count] === \"+\" && (data.token[parse.count - 1].charAt(0) === \"\\\"\" || data.token[parse.count - 1].charAt(0) === \"'\")) {\r\n                                parse.pop(data);\r\n                                q = data.token[parse.count].charAt(0);\r\n                                item = data.token[parse.count].slice(1, data.token[parse.count].length - 1) + item;\r\n                                parse.pop(data);\r\n                            }\r\n                            if (item.length > limit && limit > 0) {\r\n                                do {\r\n                                    segment = item.slice(0, limit);\r\n                                    if (segment.charAt(limit - 5) === \"\\\\\" && uchar.test(item.slice(limit - 4, limit + 1)) === true) {\r\n                                        segment = segment.slice(0, limit - 5);\r\n                                    }\r\n                                    else if (segment.charAt(limit - 4) === \"\\\\\" && uchar.test(item.slice(limit - 3, limit + 2)) === true) {\r\n                                        segment = segment.slice(0, limit - 4);\r\n                                    }\r\n                                    else if (segment.charAt(limit - 3) === \"\\\\\" && (uchar.test(item.slice(limit - 2, limit + 3)) === true || xchar.test(item.slice(limit - 2, limit + 1)) === true)) {\r\n                                        segment = segment.slice(0, limit - 3);\r\n                                    }\r\n                                    else if (segment.charAt(limit - 2) === \"\\\\\" && (uchar.test(item.slice(limit - 1, limit + 4)) === true || xchar.test(item.slice(limit - 1, limit + 2)) === true)) {\r\n                                        segment = segment.slice(0, limit - 2);\r\n                                    }\r\n                                    else if (segment.charAt(limit - 1) === \"\\\\\") {\r\n                                        segment = segment.slice(0, limit - 1);\r\n                                    }\r\n                                    segment = q + segment + q;\r\n                                    item = item.slice(segment.length - 2);\r\n                                    ltoke = segment;\r\n                                    ltype = \"string\";\r\n                                    recordPush(\"\");\r\n                                    parse.linesSpace = 0;\r\n                                    ltoke = \"+\";\r\n                                    ltype = \"operator\";\r\n                                    recordPush(\"\");\r\n                                } while (item.length > limit);\r\n                            }\r\n                            if (item === \"\") {\r\n                                ltoke = q + q;\r\n                            }\r\n                            else {\r\n                                ltoke = q + item + q;\r\n                            }\r\n                            ltype = \"string\";\r\n                        }\r\n                    }\r\n                }\r\n                else if ((/\\{\\s*\\?>$/).test(ltoke) === true) {\r\n                    if ((/^<\\?(=|(php))\\s*\\}\\s*else/).test(ltoke) === true) {\r\n                        ltype = \"template_else\";\r\n                    }\r\n                    else {\r\n                        ltype = \"template_start\";\r\n                    }\r\n                }\r\n                else if ((/^<\\?(=|(php))\\s*\\}/).test(ltoke) === true) {\r\n                    if ((/^<\\?(=|(php))\\s*\\}\\s*else/).test(ltoke) === true) {\r\n                        ltype = \"template_else\";\r\n                    }\r\n                    else {\r\n                        ltype = \"template_end\";\r\n                    }\r\n                }\r\n                else {\r\n                    ltype = type;\r\n                }\r\n                if (ltoke.length > 0) {\r\n                    recordPush(\"\");\r\n                }\r\n            };\r\n            if (wordTest > -1) {\r\n                word();\r\n            }\r\n            // this insanity is for JSON where all the required quote characters are\r\n            // escaped.\r\n            if (c[a - 1] === \"\\\\\" && slashes(a - 1) === true && (c[a] === \"\\\"\" || c[a] === \"'\")) {\r\n                parse.pop(data);\r\n                if (data.token[0] === \"{\") {\r\n                    if (c[a] === \"\\\"\") {\r\n                        starting = \"\\\"\";\r\n                        ending = \"\\\\\\\"\";\r\n                        build = [\"\\\"\"];\r\n                    }\r\n                    else {\r\n                        starting = \"'\";\r\n                        ending = \"\\\\'\";\r\n                        build = [\"'\"];\r\n                    }\r\n                    escape = true;\r\n                }\r\n                else {\r\n                    if (c[a] === \"\\\"\") {\r\n                        build = [\"\\\\\\\"\"];\r\n                        finish();\r\n                        return;\r\n                    }\r\n                    build = [\"\\\\'\"];\r\n                    finish();\r\n                    return;\r\n                }\r\n            }\r\n            ee = base;\r\n            if (ee < b) {\r\n                do {\r\n                    if (data.token[0] !== \"{\" && data.token[0] !== \"[\" && qc !== \"none\" && (c[ee] === \"\\\"\" || c[ee] === \"'\")) {\r\n                        if (c[ee - 1] === \"\\\\\") {\r\n                            if (slashes(ee - 1) === true) {\r\n                                if (qc === \"double\" && c[ee] === \"'\") {\r\n                                    build.pop();\r\n                                }\r\n                                else if (qc === \"single\" && c[ee] === \"\\\"\") {\r\n                                    build.pop();\r\n                                }\r\n                            }\r\n                        }\r\n                        else if (qc === \"double\" && c[ee] === \"\\\"\" && c[a] === \"'\") {\r\n                            c[ee] = \"\\\\\\\"\";\r\n                        }\r\n                        else if (qc === \"single\" && c[ee] === \"'\" && c[a] === \"\\\"\") {\r\n                            c[ee] = \"\\\\'\";\r\n                        }\r\n                        build.push(c[ee]);\r\n                    }\r\n                    else if (ee > start) {\r\n                        ext = true;\r\n                        if (c[ee] === \"<\" && c[ee + 1] === \"?\" && c[ee + 2] === \"p\" && c[ee + 3] === \"h\" && c[ee + 4] === \"p\" && c[ee + 5] !== starting) {\r\n                            finish();\r\n                            // php\r\n                            lexer_script_general(\"<?php\", \"?>\", \"template\");\r\n                            cleanUp();\r\n                        }\r\n                        else if (c[ee] === \"<\" && c[ee + 1] === \"?\" && c[ee + 2] === \"=\" && c[ee + 3] !== starting) {\r\n                            finish();\r\n                            // php\r\n                            lexer_script_general(\"<?=\", \"?>\", \"template\");\r\n                            cleanUp();\r\n                        }\r\n                        else if (c[ee] === \"<\" && c[ee + 1] === \"%\" && c[ee + 2] !== starting) {\r\n                            finish();\r\n                            // asp\r\n                            lexer_script_general(\"<%\", \"%>\", \"template\");\r\n                            cleanUp();\r\n                        }\r\n                        else if (c[ee] === \"{\" && c[ee + 1] === \"%\" && c[ee + 2] !== starting) {\r\n                            finish();\r\n                            // twig\r\n                            lexer_script_general(\"{%\", \"%}\", \"template\");\r\n                            cleanUp();\r\n                        }\r\n                        else if (c[ee] === \"{\" && c[ee + 1] === \"{\" && c[ee + 2] === \"{\" && c[ee + 3] !== starting) {\r\n                            finish();\r\n                            // mustache\r\n                            lexer_script_general(\"{{{\", \"}}}\", \"template\");\r\n                            cleanUp();\r\n                        }\r\n                        else if (c[ee] === \"{\" && c[ee + 1] === \"{\" && c[ee + 2] !== starting) {\r\n                            finish();\r\n                            // handlebars\r\n                            lexer_script_general(\"{{\", \"}}\", \"template\");\r\n                            cleanUp();\r\n                        }\r\n                        else if (c[ee] === \"<\" && c[ee + 1] === \"!\" && c[ee + 2] === \"-\" && c[ee + 3] === \"-\" && c[ee + 4] === \"#\" && c[ee + 5] !== starting) {\r\n                            finish();\r\n                            // ssi\r\n                            lexer_script_general(\"<!--#\", \"-->\", \"template\");\r\n                            cleanUp();\r\n                        }\r\n                        else {\r\n                            ext = false;\r\n                            build.push(c[ee]);\r\n                        }\r\n                    }\r\n                    else {\r\n                        build.push(c[ee]);\r\n                    }\r\n                    if ((starting === \"\\\"\" || starting === \"'\") && (ext === true || ee > start) && options.language !== \"json\" && c[ee - 1] !== \"\\\\\" && c[ee] !== \"\\\"\" && c[ee] !== \"'\" && (c[ee] === \"\\n\" || ee === b - 1)) {\r\n                        sparser.parseerror = \"Unterminated string in script on line number \" + parse.lineNumber;\r\n                        break;\r\n                    }\r\n                    if (c[ee] === ender[endlen - 1] && (c[ee - 1] !== \"\\\\\" || slashes(ee - 1) === false)) {\r\n                        if (endlen === 1) {\r\n                            break;\r\n                        }\r\n                        // `ee - base` is a cheap means of computing length of build array the `ee -\r\n                        // base` and `endlen` are both length based values, so adding two (1 for each)\r\n                        // provides an index based number\r\n                        if (build[ee - base] === ender[0] && build.slice(ee - base - endlen + 2).join(\"\") === ending) {\r\n                            break;\r\n                        }\r\n                    }\r\n                    ee = ee + 1;\r\n                } while (ee < b);\r\n            }\r\n            finish();\r\n        }, \r\n        // line comments\r\n        lineComment = function lexer_script_lineComment() {\r\n            asi(false);\r\n            blockinsert();\r\n            if (wordTest > -1) {\r\n                word();\r\n            }\r\n            comment = parse.wrapCommentLine({\r\n                chars: c,\r\n                end: b,\r\n                lexer: \"script\",\r\n                opening: \"//\",\r\n                start: a,\r\n                terminator: \"\\n\"\r\n            });\r\n            a = comment[1];\r\n            if (comment[0] !== \"\") {\r\n                ltoke = comment[0];\r\n                ltype = (/^(\\/\\/\\s*parse-ignore-start)/).test(ltoke)\r\n                    ? \"ignore\"\r\n                    : \"comment\";\r\n                if (ltoke.indexOf(\"# sourceMappingURL=\") === 2) {\r\n                    sourcemap[0] = parse.count + 1;\r\n                    sourcemap[1] = ltoke;\r\n                }\r\n                parse.push(data, {\r\n                    begin: parse.structure[parse.structure.length - 1][1],\r\n                    ender: -1,\r\n                    lexer: \"script\",\r\n                    lines: parse.linesSpace,\r\n                    stack: parse.structure[parse.structure.length - 1][0],\r\n                    token: ltoke,\r\n                    types: ltype\r\n                }, \"\");\r\n            }\r\n        }, \r\n        // Identifies blocks of markup embedded within JavaScript for language super sets\r\n        // like React JSX.\r\n        markup = function lexer_script_markup() {\r\n            let curlytest = false, endtag = false, anglecount = 0, curlycount = 0, tagcount = 0, d = 0, next = \"\", priorToken = \"\", priorType = \"\", output = [];\r\n            const dt = datatype[datatype.length - 1], syntaxnum = \"0123456789=<>+-*?|^:&.,;%(){}[]~\", applyMarkup = function lexer_script_markup_applyMarkup() {\r\n                if (ltoke === \"(\") {\r\n                    parse.structure[parse.structure.length - 1] = [\"paren\", parse.count];\r\n                }\r\n                sparser.lexers.markup(output.join(\"\"));\r\n            };\r\n            if (wordTest > -1) {\r\n                word();\r\n            }\r\n            // type generics tokenizer\r\n            priorToken = (parse.count > 0)\r\n                ? data.token[parse.count - 1]\r\n                : \"\";\r\n            priorType = (parse.count > 0)\r\n                ? data.types[parse.count - 1]\r\n                : \"\";\r\n            next = nextchar(1, false);\r\n            if (options.language !== \"jsx\" && options.language !== \"tsx\" && (/\\d/).test(next) === false && (ltoke === \"function\" ||\r\n                priorToken === \"=>\" ||\r\n                priorToken === \"void\" ||\r\n                priorToken === \".\" ||\r\n                data.stack[parse.count] === \"arguments\" ||\r\n                ((options.language === \"csharp\" || options.language === \"java\") && priorToken === \"public\" || priorToken === \"private\" || priorToken === \"final\" || priorToken === \"static\") ||\r\n                (ltype === \"type\" && priorToken === \"type\") ||\r\n                (ltype === \"reference\" && (priorType === \"operator\" || priorToken === \"function\" || priorToken === \"class\" || priorToken === \"new\")) ||\r\n                (ltype === \"type\" && priorType === \"operator\") ||\r\n                ltoke === \"return\" ||\r\n                ltype === \"operator\")) {\r\n                let inc = 0, e = 0;\r\n                const build = [];\r\n                d = a;\r\n                do {\r\n                    build.push(c[d]);\r\n                    if (c[d] === \"<\") {\r\n                        inc = inc + 1;\r\n                    }\r\n                    else if (c[d] === \">\") {\r\n                        inc = inc - 1;\r\n                        if (inc < 1) {\r\n                            break;\r\n                        }\r\n                    }\r\n                    d = d + 1;\r\n                } while (d < b);\r\n                e = a;\r\n                a = d;\r\n                next = nextchar(1, false);\r\n                if (c[d] === \">\" && (dt === true || priorToken === \"=>\" || priorToken === \".\" || priorType !== \"operator\" || (priorType === \"operator\" && (next === \"(\" || next === \"=\")))) {\r\n                    ltype = \"generic\";\r\n                    ltoke = build.join(\"\").replace(/^<\\s+/, \"<\").replace(/\\s+>$/, \">\").replace(/,\\s*/g, \", \");\r\n                    recordPush(\"\");\r\n                    return;\r\n                }\r\n                a = e;\r\n            }\r\n            d = parse.count;\r\n            if (data.types[d] === \"comment\") {\r\n                do {\r\n                    d = d - 1;\r\n                } while (d > 0 && data.types[d] === \"comment\");\r\n            }\r\n            if (dt === false &&\r\n                nextchar(1, false) !== \">\" && ((c[a] !== \"<\" && syntaxnum.indexOf(c[a + 1]) > -1) ||\r\n                data.token[d] === \"++\" ||\r\n                data.token[d] === \"--\" ||\r\n                (/\\s/).test(c[a + 1]) === true ||\r\n                ((/\\d/).test(c[a + 1]) === true &&\r\n                    (ltype === \"operator\" ||\r\n                        ltype === \"string\" ||\r\n                        ltype === \"number\" ||\r\n                        ltype === \"reference\" ||\r\n                        (ltype === \"word\" && ltoke !== \"return\"))))) {\r\n                ltype = \"operator\";\r\n                ltoke = operator();\r\n                return recordPush(\"\");\r\n            }\r\n            if (options.language !== \"typescript\" && options.language !== \"flow\" && (data.token[d] === \"return\" || data.types[d] === \"operator\" || data.types[d] === \"start\" || data.types[d] === \"separator\" || data.types[d] === \"jsx_attribute_start\" || (data.token[d] === \"}\" && parse.structure[parse.structure.length - 1][0] === \"global\"))) {\r\n                ltype = \"markup\";\r\n                options.language = \"jsx\";\r\n                do {\r\n                    output.push(c[a]);\r\n                    if (c[a] === \"{\") {\r\n                        curlycount = curlycount + 1;\r\n                        curlytest = true;\r\n                    }\r\n                    else if (c[a] === \"}\") {\r\n                        curlycount = curlycount - 1;\r\n                        if (curlycount === 0) {\r\n                            curlytest = false;\r\n                        }\r\n                    }\r\n                    else if (c[a] === \"<\" && curlytest === false) {\r\n                        if (c[a + 1] === \"<\") {\r\n                            do {\r\n                                output.push(c[a]);\r\n                                a = a + 1;\r\n                            } while (a < b && c[a + 1] === \"<\");\r\n                        }\r\n                        anglecount = anglecount + 1;\r\n                        if (nextchar(1, false) === \"/\") {\r\n                            endtag = true;\r\n                        }\r\n                    }\r\n                    else if (c[a] === \">\" && curlytest === false) {\r\n                        if (c[a + 1] === \">\") {\r\n                            do {\r\n                                output.push(c[a]);\r\n                                a = a + 1;\r\n                            } while (c[a + 1] === \">\");\r\n                        }\r\n                        anglecount = anglecount - 1;\r\n                        if (endtag === true) {\r\n                            tagcount = tagcount - 1;\r\n                        }\r\n                        else if (c[a - 1] !== \"/\") {\r\n                            tagcount = tagcount + 1;\r\n                        }\r\n                        if (anglecount === 0 && curlycount === 0 && tagcount < 1) {\r\n                            next = nextchar(2, false);\r\n                            if (next.charAt(0) !== \"<\") {\r\n                                // if followed by nonmarkup\r\n                                return applyMarkup();\r\n                            }\r\n                            // catch additional trailing tag sets\r\n                            if (next.charAt(0) === \"<\" && syntaxnum.indexOf(next.charAt(1)) < 0 && (/\\s/).test(next.charAt(1)) === false) {\r\n                                // perform a minor safety test to verify if \"<\" is a tag start or a less than\r\n                                // operator\r\n                                d = a + 1;\r\n                                do {\r\n                                    d = d + 1;\r\n                                    if (c[d] === \">\" || ((/\\s/).test(c[d - 1]) === true && syntaxnum.indexOf(c[d]) < 0)) {\r\n                                        break;\r\n                                    }\r\n                                    if (syntaxnum.indexOf(c[d]) > -1) {\r\n                                        // if followed by additional markup tags\r\n                                        return applyMarkup();\r\n                                    }\r\n                                } while (d < b);\r\n                            }\r\n                            else {\r\n                                // if a nonmarkup \"<\" follows markup\r\n                                return applyMarkup();\r\n                            }\r\n                        }\r\n                        endtag = false;\r\n                    }\r\n                    a = a + 1;\r\n                } while (a < b);\r\n                return applyMarkup();\r\n            }\r\n            ltype = \"operator\";\r\n            ltoke = operator();\r\n            recordPush(\"\");\r\n            return;\r\n        }, \r\n        // peek at whats up next\r\n        nextchar = function lexer_script_nextchar(len, current) {\r\n            let cc = (current === true)\r\n                ? a\r\n                : a + 1, dd = \"\";\r\n            if (typeof len !== \"number\" || len < 1) {\r\n                len = 1;\r\n            }\r\n            if (c[a] === \"/\") {\r\n                if (c[a + 1] === \"/\") {\r\n                    dd = \"\\n\";\r\n                }\r\n                else if (c[a + 1] === \"*\") {\r\n                    dd = \"/\";\r\n                }\r\n            }\r\n            if (cc < b) {\r\n                do {\r\n                    if ((/\\s/).test(c[cc]) === false) {\r\n                        if (c[cc] === \"/\") {\r\n                            if (dd === \"\") {\r\n                                if (c[cc + 1] === \"/\") {\r\n                                    dd = \"\\n\";\r\n                                }\r\n                                else if (c[cc + 1] === \"*\") {\r\n                                    dd = \"/\";\r\n                                }\r\n                            }\r\n                            else if (dd === \"/\" && c[cc - 1] === \"*\") {\r\n                                dd = \"\";\r\n                            }\r\n                        }\r\n                        if (dd === \"\" && c[cc - 1] + c[cc] !== \"\\u002a/\") {\r\n                            return c\r\n                                .slice(cc, cc + len)\r\n                                .join(\"\");\r\n                        }\r\n                    }\r\n                    else if (dd === \"\\n\" && c[cc] === \"\\n\") {\r\n                        dd = \"\";\r\n                    }\r\n                    cc = cc + 1;\r\n                } while (cc < b);\r\n            }\r\n            return \"\";\r\n        }, \r\n        // a tokenizer for numbers\r\n        numb = function lexer_script_number() {\r\n            const f = b, build = [c[a]];\r\n            let ee = 0, test = /zz/, dot = (build[0] === \".\");\r\n            if (a < b - 2 && c[a] === \"0\") {\r\n                if (c[a + 1] === \"x\") {\r\n                    test = /[0-9a-fA-F]/;\r\n                }\r\n                else if (c[a + 1] === \"o\") {\r\n                    test = /[0-9]/;\r\n                }\r\n                else if (c[a + 1] === \"b\") {\r\n                    test = /0|1/;\r\n                }\r\n                if (test.test(c[a + 2]) === true) {\r\n                    build.push(c[a + 1]);\r\n                    ee = a + 1;\r\n                    do {\r\n                        ee = ee + 1;\r\n                        build.push(c[ee]);\r\n                    } while (test.test(c[ee + 1]) === true);\r\n                    a = ee;\r\n                    return build.join(\"\");\r\n                }\r\n            }\r\n            ee = a + 1;\r\n            if (ee < f) {\r\n                do {\r\n                    if ((/[0-9]/).test(c[ee]) || (c[ee] === \".\" && dot === false)) {\r\n                        build.push(c[ee]);\r\n                        if (c[ee] === \".\") {\r\n                            dot = true;\r\n                        }\r\n                    }\r\n                    else {\r\n                        break;\r\n                    }\r\n                    ee = ee + 1;\r\n                } while (ee < f);\r\n            }\r\n            if (ee < f - 1 && ((/\\d/).test(c[ee - 1]) === true || ((/\\d/).test(c[ee - 2]) === true && (c[ee - 1] === \"-\" || c[ee - 1] === \"+\"))) && (c[ee] === \"e\" || c[ee] === \"E\")) {\r\n                build.push(c[ee]);\r\n                if (c[ee + 1] === \"-\" || c[ee + 1] === \"+\") {\r\n                    build.push(c[ee + 1]);\r\n                    ee = ee + 1;\r\n                }\r\n                dot = false;\r\n                ee = ee + 1;\r\n                if (ee < f) {\r\n                    do {\r\n                        if ((/[0-9]/).test(c[ee]) || (c[ee] === \".\" && dot === false)) {\r\n                            build.push(c[ee]);\r\n                            if (c[ee] === \".\") {\r\n                                dot = true;\r\n                            }\r\n                        }\r\n                        else {\r\n                            break;\r\n                        }\r\n                        ee = ee + 1;\r\n                    } while (ee < f);\r\n                }\r\n            }\r\n            a = ee - 1;\r\n            return build.join(\"\");\r\n        }, \r\n        // a unique tokenizer for operator characters\r\n        operator = function lexer_script_operator() {\r\n            let g = 0, h = 0, jj = b, output = \"\";\r\n            const syntax = [\r\n                \"=\",\r\n                \"<\",\r\n                \">\",\r\n                \"+\",\r\n                \"*\",\r\n                \"?\",\r\n                \"|\",\r\n                \"^\",\r\n                \":\",\r\n                \"&\",\r\n                \"%\",\r\n                \"~\"\r\n            ], synlen = syntax.length;\r\n            if (wordTest > -1) {\r\n                word();\r\n            }\r\n            if (c[a] === \"/\" && (parse.count > -1 && ((ltype !== \"word\" && ltype !== \"reference\") || ltoke === \"typeof\" || ltoke === \"return\" || ltoke === \"else\") && ltype !== \"number\" && ltype !== \"string\" && ltype !== \"end\")) {\r\n                if (ltoke === \"return\" || ltoke === \"typeof\" || ltoke === \"else\" || ltype !== \"word\") {\r\n                    ltoke = regex();\r\n                    ltype = \"regex\";\r\n                }\r\n                else {\r\n                    ltoke = \"/\";\r\n                    ltype = \"operator\";\r\n                }\r\n                recordPush(\"\");\r\n                return \"regex\";\r\n            }\r\n            if (c[a] === \"?\" && (\"+-\\u002a/.?\".indexOf(c[a + 1]) > -1 || (c[a + 1] === \":\" && syntax.join(\"\").indexOf(c[a + 2]) < 0))) {\r\n                if (c[a + 1] === \".\" && (/\\d/).test(c[a + 2]) === false) {\r\n                    output = \"?.\";\r\n                }\r\n                else if (c[a + 1] === \"?\") {\r\n                    output = \"??\";\r\n                }\r\n                if (output === \"\") {\r\n                    return \"?\";\r\n                }\r\n            }\r\n            if (c[a] === \":\" && \"+-\\u002a/\".indexOf(c[a + 1]) > -1) {\r\n                return \":\";\r\n            }\r\n            if (a < b - 1) {\r\n                if (c[a] !== \"<\" && c[a + 1] === \"<\") {\r\n                    return c[a];\r\n                }\r\n                if (c[a] === \"!\" && c[a + 1] === \"/\") {\r\n                    return \"!\";\r\n                }\r\n                if (c[a] === \"-\") {\r\n                    datatype[datatype.length - 1] = false;\r\n                    if (c[a + 1] === \"-\") {\r\n                        output = \"--\";\r\n                    }\r\n                    else if (c[a + 1] === \"=\") {\r\n                        output = \"-=\";\r\n                    }\r\n                    else if (c[a + 1] === \">\") {\r\n                        output = \"->\";\r\n                    }\r\n                    if (output === \"\") {\r\n                        return \"-\";\r\n                    }\r\n                }\r\n                if (c[a] === \"+\") {\r\n                    datatype[datatype.length - 1] = false;\r\n                    if (c[a + 1] === \"+\") {\r\n                        output = \"++\";\r\n                    }\r\n                    else if (c[a + 1] === \"=\") {\r\n                        output = \"+=\";\r\n                    }\r\n                    if (output === \"\") {\r\n                        return \"+\";\r\n                    }\r\n                }\r\n                if (c[a] === \"=\" && c[a + 1] !== \"=\" && c[a + 1] !== \"!\" && c[a + 1] !== \">\") {\r\n                    datatype[datatype.length - 1] = false;\r\n                    return \"=\";\r\n                }\r\n            }\r\n            if (c[a] === \":\") {\r\n                if (options.language === \"typescript\" || options.language === \"flow\") {\r\n                    if (data.stack[parse.count] === \"arguments\") {\r\n                        if (data.token[parse.count] === \"?\") {\r\n                            parse.pop(data);\r\n                            output = \"?:\";\r\n                            a = a - 1;\r\n                        }\r\n                        datatype[datatype.length - 1] = true;\r\n                    }\r\n                    else if (ltoke === \")\" && (data.token[data.begin[parse.count] - 1] === \"function\" || data.token[data.begin[parse.count] - 2] === \"function\")) {\r\n                        datatype[datatype.length - 1] = true;\r\n                    }\r\n                    else if (ltype === \"reference\") {\r\n                        g = parse.count;\r\n                        let colon = false;\r\n                        do {\r\n                            if (data.begin[g] === data.begin[parse.count]) {\r\n                                if (g < parse.count && data.token[g] === \":\" && data.types[g + 1] !== \"type\") {\r\n                                    colon = true;\r\n                                }\r\n                                if (data.token[g] === \"?\" && colon === false) {\r\n                                    break;\r\n                                }\r\n                                if (data.token[g] === \";\" || data.token[g] === \"x;\") {\r\n                                    break;\r\n                                }\r\n                                if (data.token[g] === \"var\" || data.token[g] === \"let\" || data.token[g] === \"const\" || data.types[g] === \"type\") {\r\n                                    datatype[datatype.length - 1] = true;\r\n                                    break;\r\n                                }\r\n                            }\r\n                            else {\r\n                                if (data.types[g] === \"type_end\") {\r\n                                    datatype[datatype.length - 1] = true;\r\n                                    break;\r\n                                }\r\n                                g = data.begin[g];\r\n                            }\r\n                            g = g - 1;\r\n                        } while (g > data.begin[parse.count]);\r\n                    }\r\n                }\r\n                else if ((data.types[parse.count] === \"word\" || data.types[parse.count] === \"reference\") && data.token[parse.count - 1] === \"[\") {\r\n                    parse.structure[parse.structure.length - 1][0] = \"attribute\";\r\n                    data.stack[parse.count] = \"attribute\";\r\n                }\r\n            }\r\n            if (output === \"\") {\r\n                if ((c[a + 1] === \"+\" && c[a + 2] === \"+\") || (c[a + 1] === \"-\" && c[a + 2] === \"-\")) {\r\n                    output = c[a];\r\n                }\r\n                else {\r\n                    const buildout = [c[a]];\r\n                    g = a + 1;\r\n                    if (g < jj) {\r\n                        do {\r\n                            if ((c[g] === \"+\" && c[g + 1] === \"+\") || (c[g] === \"-\" && c[g + 1] === \"-\")) {\r\n                                break;\r\n                            }\r\n                            h = 0;\r\n                            if (h < synlen) {\r\n                                do {\r\n                                    if (c[g] === syntax[h]) {\r\n                                        buildout.push(syntax[h]);\r\n                                        break;\r\n                                    }\r\n                                    h = h + 1;\r\n                                } while (h < synlen);\r\n                            }\r\n                            if (h === synlen) {\r\n                                break;\r\n                            }\r\n                            g = g + 1;\r\n                        } while (g < jj);\r\n                    }\r\n                    output = buildout.join(\"\");\r\n                }\r\n            }\r\n            a = a + (output.length - 1);\r\n            if (output === \"=>\" && ltoke === \")\") {\r\n                g = parse.count;\r\n                jj = data.begin[g];\r\n                do {\r\n                    if (data.begin[g] === jj) {\r\n                        data.stack[g] = \"method\";\r\n                    }\r\n                    g = g - 1;\r\n                } while (g > jj - 1);\r\n            }\r\n            return output;\r\n        }, \r\n        // convert ++ and -- into \"= x +\"  and \"= x -\" in most cases\r\n        plusplus = function lexer_script_plusplus() {\r\n            let pre = true, toke = \"+\", tokea = \"\", tokeb = \"\", tokec = \"\", inc = 0, ind = 0, walk = 0, next = \"\";\r\n            const store = [], end = function lexer_script_plusplus_end() {\r\n                walk = data.begin[walk] - 1;\r\n                if (data.types[walk] === \"end\") {\r\n                    lexer_script_plusplus_end();\r\n                }\r\n                else if (data.token[walk - 1] === \".\") {\r\n                    period();\r\n                }\r\n            }, period = function lexer_script_plusplus_period() {\r\n                walk = walk - 2;\r\n                if (data.types[walk] === \"end\") {\r\n                    end();\r\n                }\r\n                else if (data.token[walk - 1] === \".\") {\r\n                    lexer_script_plusplus_period();\r\n                }\r\n            }, applyStore = function lexer_script_plusplus_applyStore() {\r\n                let x = 0;\r\n                const y = store.length;\r\n                if (x < y) {\r\n                    do {\r\n                        parse.push(data, store[x], \"\");\r\n                        x = x + 1;\r\n                    } while (x < y);\r\n                }\r\n            }, recordStore = function lexer_script_plusplus_recordStore(index) {\r\n                return {\r\n                    begin: data.begin[index],\r\n                    ender: data.ender[index],\r\n                    lexer: data.lexer[index],\r\n                    lines: data.lines[index],\r\n                    stack: data.stack[index],\r\n                    token: data.token[index],\r\n                    types: data.types[index]\r\n                };\r\n            };\r\n            tokea = data.token[parse.count];\r\n            tokeb = data.token[parse.count - 1];\r\n            tokec = data.token[parse.count - 2];\r\n            if (tokea !== \"++\" && tokea !== \"--\" && tokeb !== \"++\" && tokeb !== \"--\") {\r\n                walk = parse.count;\r\n                if (data.types[walk] === \"end\") {\r\n                    end();\r\n                }\r\n                else if (data.token[walk - 1] === \".\") {\r\n                    period();\r\n                }\r\n            }\r\n            if (data.token[walk - 1] === \"++\" || data.token[walk - 1] === \"--\") {\r\n                if (\"startendoperator\".indexOf(data.types[walk - 2]) > -1) {\r\n                    return;\r\n                }\r\n                inc = walk;\r\n                if (inc < parse.count + 1) {\r\n                    do {\r\n                        store.push(recordStore(inc));\r\n                        inc = inc + 1;\r\n                    } while (inc < parse.count + 1);\r\n                    parse.splice({\r\n                        data: data,\r\n                        howmany: parse.count - walk,\r\n                        index: walk\r\n                    });\r\n                }\r\n            }\r\n            else {\r\n                if (options.correct === false || (tokea !== \"++\" && tokea !== \"--\" && tokeb !== \"++\" && tokeb !== \"--\")) {\r\n                    return;\r\n                }\r\n                next = nextchar(1, false);\r\n                if ((tokea === \"++\" || tokea === \"--\") && (c[a] === \";\" || next === \";\" || c[a] === \"}\" || next === \"}\" || c[a] === \")\" || next === \")\")) {\r\n                    toke = data.stack[parse.count];\r\n                    if (toke === \"array\" || toke === \"method\" || toke === \"object\" || toke === \"paren\" || toke === \"notation\" || (data.token[data.begin[parse.count] - 1] === \"while\" && toke !== \"while\")) {\r\n                        return;\r\n                    }\r\n                    inc = parse.count;\r\n                    do {\r\n                        inc = inc - 1;\r\n                        if (data.token[inc] === \"return\") {\r\n                            return;\r\n                        }\r\n                        if (data.types[inc] === \"end\") {\r\n                            do {\r\n                                inc = data.begin[inc] - 1;\r\n                            } while (data.types[inc] === \"end\" && inc > 0);\r\n                        }\r\n                    } while (inc > 0 && (data.token[inc] === \".\" || data.types[inc] === \"word\" || data.types[inc] === \"reference\" || data.types[inc] === \"end\"));\r\n                    if (data.token[inc] === \",\" && c[a] !== \";\" && next !== \";\" && c[a] !== \"}\" && next !== \"}\" && c[a] !== \")\" && next !== \")\") {\r\n                        return;\r\n                    }\r\n                    if (data.types[inc] === \"operator\") {\r\n                        if (data.stack[inc] === \"switch\" && data.token[inc] === \":\") {\r\n                            do {\r\n                                inc = inc - 1;\r\n                                if (data.types[inc] === \"start\") {\r\n                                    ind = ind - 1;\r\n                                    if (ind < 0) {\r\n                                        break;\r\n                                    }\r\n                                }\r\n                                else if (data.types[inc] === \"end\") {\r\n                                    ind = ind + 1;\r\n                                }\r\n                                if (data.token[inc] === \"?\" && ind === 0) {\r\n                                    return;\r\n                                }\r\n                            } while (inc > 0);\r\n                        }\r\n                        else {\r\n                            return;\r\n                        }\r\n                    }\r\n                    pre = false;\r\n                    if (tokea === \"--\") {\r\n                        toke = \"-\";\r\n                    }\r\n                    else {\r\n                        toke = \"+\";\r\n                    }\r\n                }\r\n                else if (tokec === \"[\" || tokec === \";\" || tokec === \"x;\" || tokec === \"}\" || tokec === \"{\" || tokec === \"(\" || tokec === \")\" || tokec === \",\" || tokec === \"return\") {\r\n                    if (tokea === \"++\" || tokea === \"--\") {\r\n                        if (tokec === \"[\" || tokec === \"(\" || tokec === \",\" || tokec === \"return\") {\r\n                            return;\r\n                        }\r\n                        if (tokea === \"--\") {\r\n                            toke = \"-\";\r\n                        }\r\n                        pre = false;\r\n                    }\r\n                    else if (tokeb === \"--\" || tokea === \"--\") {\r\n                        toke = \"-\";\r\n                    }\r\n                }\r\n                else {\r\n                    return;\r\n                }\r\n                if (pre === false) {\r\n                    tempstore = parse.pop(data);\r\n                }\r\n                walk = parse.count;\r\n                if (data.types[walk] === \"end\") {\r\n                    end();\r\n                }\r\n                else if (data.token[walk - 1] === \".\") {\r\n                    period();\r\n                }\r\n                inc = walk;\r\n                if (inc < parse.count + 1) {\r\n                    do {\r\n                        store.push(recordStore(inc));\r\n                        inc = inc + 1;\r\n                    } while (inc < parse.count + 1);\r\n                }\r\n            }\r\n            if (pre === true) {\r\n                parse.splice({\r\n                    data: data,\r\n                    howmany: 1,\r\n                    index: walk - 1\r\n                });\r\n                ltoke = \"=\";\r\n                ltype = \"operator\";\r\n                recordPush(\"\");\r\n                applyStore();\r\n                ltoke = toke;\r\n                ltype = \"operator\";\r\n                recordPush(\"\");\r\n                ltoke = \"1\";\r\n                ltype = \"number\";\r\n                recordPush(\"\");\r\n            }\r\n            else {\r\n                ltoke = \"=\";\r\n                ltype = \"operator\";\r\n                recordPush(\"\");\r\n                applyStore();\r\n                ltoke = toke;\r\n                ltype = \"operator\";\r\n                recordPush(\"\");\r\n                ltoke = \"1\";\r\n                ltype = \"number\";\r\n                recordPush(\"\");\r\n            }\r\n            ltoke = data.token[parse.count];\r\n            ltype = data.types[parse.count];\r\n            if (next === \"}\" && c[a] !== \";\") {\r\n                asi(false);\r\n            }\r\n        }, \r\n        // determine the definition of containment by stack\r\n        recordPush = function lexer_script_recordPush(structure) {\r\n            const record = {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"script\",\r\n                lines: parse.linesSpace,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: ltoke,\r\n                types: ltype\r\n            };\r\n            parse.push(data, record, structure);\r\n        }, \r\n        // a tokenizer for regular expressions\r\n        regex = function lexer_script_regex() {\r\n            let ee = a + 1, h = 0, i = 0, output = \"\", square = false;\r\n            const f = b, build = [\"/\"];\r\n            if (ee < f) {\r\n                do {\r\n                    build.push(c[ee]);\r\n                    if (c[ee - 1] !== \"\\\\\" || c[ee - 2] === \"\\\\\") {\r\n                        if (c[ee] === \"[\") {\r\n                            square = true;\r\n                        }\r\n                        if (c[ee] === \"]\") {\r\n                            square = false;\r\n                        }\r\n                    }\r\n                    if (c[ee] === \"/\" && square === false) {\r\n                        if (c[ee - 1] === \"\\\\\") {\r\n                            i = 0;\r\n                            h = ee - 1;\r\n                            if (h > 0) {\r\n                                do {\r\n                                    if (c[h] === \"\\\\\") {\r\n                                        i = i + 1;\r\n                                    }\r\n                                    else {\r\n                                        break;\r\n                                    }\r\n                                    h = h - 1;\r\n                                } while (h > 0);\r\n                            }\r\n                            if (i % 2 === 0) {\r\n                                break;\r\n                            }\r\n                        }\r\n                        else {\r\n                            break;\r\n                        }\r\n                    }\r\n                    ee = ee + 1;\r\n                } while (ee < f);\r\n            }\r\n            if (c[ee + 1] === \"g\" || c[ee + 1] === \"i\" || c[ee + 1] === \"m\" || c[ee + 1] === \"y\" || c[ee + 1] === \"u\") {\r\n                build.push(c[ee + 1]);\r\n                if (c[ee + 2] !== c[ee + 1] && (c[ee + 2] === \"g\" || c[ee + 2] === \"i\" || c[ee + 2] === \"m\" || c[ee + 2] === \"y\" || c[ee + 2] === \"u\")) {\r\n                    build.push(c[ee + 2]);\r\n                    if (c[ee + 3] !== c[ee + 1] && c[ee + 3] !== c[ee + 2] && (c[ee + 3] === \"g\" || c[ee + 3] === \"i\" || c[ee + 3] === \"m\" || c[ee + 3] === \"y\" || c[ee + 3] === \"u\")) {\r\n                        build.push(c[ee + 3]);\r\n                        if (c[ee + 4] !== c[ee + 1] && c[ee + 4] !== c[ee + 2] && c[ee + 4] !== c[ee + 3] && (c[ee + 4] === \"g\" || c[ee + 4] === \"i\" || c[ee + 4] === \"m\" || c[ee + 4] === \"y\" || c[ee + 4] === \"u\")) {\r\n                            build.push(c[ee + 4]);\r\n                            if (c[ee + 5] !== c[ee + 1] && c[ee + 5] !== c[ee + 2] && c[ee + 5] !== c[ee + 3] && c[ee + 5] !== c[ee + 4] && (c[ee + 5] === \"g\" || c[ee + 5] === \"i\" || c[ee + 5] === \"m\" || c[ee + 5] === \"y\" || c[ee + 5] === \"u\")) {\r\n                                build.push(c[ee + 4]);\r\n                                a = ee + 5;\r\n                            }\r\n                            else {\r\n                                a = ee + 4;\r\n                            }\r\n                        }\r\n                        else {\r\n                            a = ee + 3;\r\n                        }\r\n                    }\r\n                    else {\r\n                        a = ee + 2;\r\n                    }\r\n                }\r\n                else {\r\n                    a = ee + 1;\r\n                }\r\n            }\r\n            else {\r\n                a = ee;\r\n            }\r\n            output = build.join(\"\");\r\n            return output;\r\n        }, \r\n        // determines if a slash comprises a valid escape or if it is escaped itself\r\n        slashes = function lexer_script_slashes(index) {\r\n            const slashy = index;\r\n            do {\r\n                index = index - 1;\r\n            } while (c[index] === \"\\\\\" && index > 0);\r\n            if ((slashy - index) % 2 === 1) {\r\n                return true;\r\n            }\r\n            return false;\r\n        }, \r\n        // operations for start types: (, [, {\r\n        start = function lexer_script_start(x) {\r\n            let aa = parse.count, wordx = \"\", wordy = \"\", stack = \"\", func = false;\r\n            brace.push(x);\r\n            if (x === \"{\" && (data.types[parse.count] === \"type\" || data.types[parse.count] === \"type_end\" || data.types[parse.count] === \"generic\")) {\r\n                // this block determines if a function body follows a type annotation\r\n                let begin = 0;\r\n                if (data.types[parse.count] === \"type_end\") {\r\n                    aa = data.begin[parse.count];\r\n                }\r\n                begin = aa;\r\n                do {\r\n                    aa = aa - 1;\r\n                    if (data.begin[aa] !== begin && data.begin[aa] !== -1) {\r\n                        break;\r\n                    }\r\n                    if (data.token[aa] === \":\") {\r\n                        break;\r\n                    }\r\n                } while (aa > data.begin[aa]);\r\n                if (data.token[aa] === \":\" && data.stack[aa - 1] === \"arguments\") {\r\n                    datatype.push(false);\r\n                    func = true;\r\n                }\r\n                else {\r\n                    datatype.push(datatype[datatype.length - 1]);\r\n                }\r\n                aa = parse.count;\r\n            }\r\n            else if (x === \"[\" && data.types[parse.count] === \"type_end\") {\r\n                datatype.push(true);\r\n            }\r\n            else {\r\n                datatype.push(datatype[datatype.length - 1]);\r\n            }\r\n            if (wordTest > -1) {\r\n                word();\r\n                aa = parse.count;\r\n            }\r\n            if (vart.len > -1) {\r\n                vart.count[vart.len] = vart.count[vart.len] + 1;\r\n            }\r\n            if (data.token[aa - 1] === \"function\") {\r\n                lword.push([\r\n                    \"function\", aa + 1\r\n                ]);\r\n            }\r\n            else {\r\n                lword.push([\r\n                    ltoke, aa + 1\r\n                ]);\r\n            }\r\n            ltoke = x;\r\n            if (datatype[datatype.length - 1] === true) {\r\n                ltype = \"type_start\";\r\n            }\r\n            else {\r\n                ltype = \"start\";\r\n            }\r\n            if (x === \"(\" || x === \"x(\") {\r\n                asifix();\r\n            }\r\n            else if (x === \"{\") {\r\n                if (paren > -1) {\r\n                    if (data.begin[paren - 1] === data.begin[data.begin[aa] - 1] || data.token[data.begin[aa]] === \"x(\") {\r\n                        paren = -1;\r\n                        if (options.correct === true) {\r\n                            end(\")\");\r\n                        }\r\n                        else {\r\n                            end(\"x)\");\r\n                        }\r\n                        asifix();\r\n                        ltoke = \"{\";\r\n                        ltype = \"start\";\r\n                    }\r\n                }\r\n                else if (ltoke === \")\") {\r\n                    asifix();\r\n                }\r\n                if (ltype === \"comment\" && data.token[aa - 1] === \")\") {\r\n                    ltoke = data.token[aa];\r\n                    data.token[aa] = \"{\";\r\n                    ltype = data.types[aa];\r\n                    data.types[aa] = \"start\";\r\n                }\r\n            }\r\n            wordx = (function lexer_script_start_wordx() {\r\n                let bb = parse.count;\r\n                if (data.types[bb] === \"comment\") {\r\n                    do {\r\n                        bb = bb - 1;\r\n                    } while (bb > 0 && data.types[bb] === \"comment\");\r\n                }\r\n                return data.token[bb];\r\n            }());\r\n            wordy = (data.stack[aa] === undefined)\r\n                ? \"\"\r\n                : (function lexer_script_start_wordy() {\r\n                    let bb = parse.count;\r\n                    if (data.types[bb] === \"comment\") {\r\n                        do {\r\n                            bb = bb - 1;\r\n                        } while (bb > 0 && data.types[bb] === \"comment\");\r\n                    }\r\n                    return data.token[data.begin[bb] - 1];\r\n                }());\r\n            if (ltoke === \"{\" && (data.types[aa] === \"word\" || data.token[aa] === \"]\")) {\r\n                let bb = aa;\r\n                if (data.token[bb] === \"]\") {\r\n                    do {\r\n                        bb = data.begin[bb] - 1;\r\n                    } while (data.token[bb] === \"]\");\r\n                }\r\n                do {\r\n                    if (data.types[bb] === \"start\" || data.types[bb] === \"end\" || data.types[bb] === \"operator\") {\r\n                        break;\r\n                    }\r\n                    bb = bb - 1;\r\n                } while (bb > 0);\r\n                if (data.token[bb] === \":\" && data.stack[bb - 1] === \"arguments\") {\r\n                    stack = \"function\";\r\n                    references.push(funreferences);\r\n                    funreferences = [];\r\n                }\r\n            }\r\n            if (ltype === \"type_start\") {\r\n                stack = \"data_type\";\r\n            }\r\n            else if (stack === \"\" && (ltoke === \"{\" || ltoke === \"x{\")) {\r\n                if (wordx === \"else\" || wordx === \"do\" || wordx === \"try\" || wordx === \"finally\" || wordx === \"switch\") {\r\n                    stack = wordx;\r\n                }\r\n                else if (classy[classy.length - 1] === 0 && wordx !== \"return\") {\r\n                    classy.pop();\r\n                    stack = \"class\";\r\n                }\r\n                else if (data.token[aa - 1] === \"class\") {\r\n                    stack = \"class\";\r\n                }\r\n                else if (data.token[aa] === \"]\" && data.token[aa - 1] === \"[\") {\r\n                    stack = \"array\";\r\n                }\r\n                else if ((data.types[aa] === \"word\" || data.types[aa] === \"reference\") &&\r\n                    (data.types[aa - 1] === \"word\" ||\r\n                        data.types[aa - 1] === \"reference\" ||\r\n                        (data.token[aa - 1] === \"?\" && (data.types[aa - 2] === \"word\" || data.types[aa - 2] === \"reference\"))) &&\r\n                    data.token[aa] !== \"in\" &&\r\n                    data.token[aa - 1] !== \"export\" &&\r\n                    data.token[aa - 1] !== \"import\") {\r\n                    stack = \"map\";\r\n                }\r\n                else if (data.stack[aa] === \"method\" &&\r\n                    data.types[aa] === \"end\" &&\r\n                    (data.types[data.begin[aa] - 1] === \"word\" || data.types[data.begin[aa] - 1] === \"reference\") &&\r\n                    data.token[data.begin[aa] - 2] === \"new\") {\r\n                    stack = \"initializer\";\r\n                }\r\n                else if (ltoke === \"{\" &&\r\n                    (wordx === \")\" || wordx === \"x)\") &&\r\n                    (data.types[data.begin[aa] - 1] === \"word\" || data.types[data.begin[aa] - 1] === \"reference\" || data.token[data.begin[aa] - 1] === \"]\")) {\r\n                    if (wordy === \"if\") {\r\n                        stack = \"if\";\r\n                    }\r\n                    else if (wordy === \"for\") {\r\n                        stack = \"for\";\r\n                    }\r\n                    else if (wordy === \"while\") {\r\n                        stack = \"while\";\r\n                    }\r\n                    else if (wordy === \"class\") {\r\n                        stack = \"class\";\r\n                    }\r\n                    else if (wordy === \"switch\" || data.token[data.begin[aa] - 1] === \"switch\") {\r\n                        stack = \"switch\";\r\n                    }\r\n                    else if (wordy === \"catch\") {\r\n                        stack = \"catch\";\r\n                    }\r\n                    else {\r\n                        stack = \"function\";\r\n                    }\r\n                }\r\n                else if (ltoke === \"{\" && (wordx === \";\" || wordx === \"x;\")) {\r\n                    // ES6 block\r\n                    stack = \"block\";\r\n                }\r\n                else if (ltoke === \"{\" && data.token[aa] === \":\" && data.stack[aa] === \"switch\") {\r\n                    // ES6 block\r\n                    stack = \"block\";\r\n                }\r\n                else if (data.token[aa - 1] === \"import\" || data.token[aa - 2] === \"import\" || data.token[aa - 1] === \"export\" || data.token[aa - 2] === \"export\") {\r\n                    stack = \"object\";\r\n                }\r\n                else if (wordx === \")\" && (pword[0] === \"function\" || pword[0] === \"if\" || pword[0] === \"for\" || pword[0] === \"class\" || pword[0] === \"while\" || pword[0] === \"switch\" || pword[0] === \"catch\")) {\r\n                    // if preceeded by a paren the prior containment is preceeded by a keyword if\r\n                    // (...) {\r\n                    stack = pword[0];\r\n                }\r\n                else if (data.stack[aa] === \"notation\") {\r\n                    // if following a TSX array type declaration\r\n                    stack = \"function\";\r\n                }\r\n                else if ((data.types[aa] === \"number\" ||\r\n                    data.types[aa] === \"string\" ||\r\n                    data.types[aa] === \"word\" ||\r\n                    data.types[aa] === \"reference\") &&\r\n                    (data.types[aa - 1] === \"word\" || data.types[aa - 1] === \"reference\") &&\r\n                    data.token[data.begin[aa] - 1] !== \"for\") {\r\n                    // if preceed by a word and either string or word public class {\r\n                    stack = \"function\";\r\n                }\r\n                else if (parse.structure.length > 0 && data.token[aa] !== \":\" && parse.structure[parse.structure.length - 1][0] === \"object\" && (data.token[data.begin[aa] - 2] === \"{\" || data.token[data.begin[aa] - 2] === \",\")) {\r\n                    // if an object wrapped in some containment which is itself preceeded by a curly\r\n                    // brace or comma var a={({b:{cat:\"meow\"}})};\r\n                    stack = \"function\";\r\n                }\r\n                else if (data.types[pword[1] - 1] === \"markup\" && data.token[pword[1] - 3] === \"function\") {\r\n                    // checking for TSX function using an angle brace name\r\n                    stack = \"function\";\r\n                }\r\n                else if (wordx === \"=>\") {\r\n                    // checking for fat arrow assignment\r\n                    stack = \"function\";\r\n                }\r\n                else if (func === true || (data.types[parse.count] === \"type_end\" && data.stack[data.begin[parse.count] - 2] === \"arguments\")) {\r\n                    // working around typescript inline interface\r\n                    stack = \"function\";\r\n                }\r\n                else if (wordx === \")\" &&\r\n                    data.stack[aa] === \"method\" &&\r\n                    (data.types[data.begin[aa] - 1] === \"word\" || data.types[data.begin[aa] - 1] === \"property\" || data.types[data.begin[aa] - 1] === \"reference\")) {\r\n                    stack = \"function\";\r\n                }\r\n                else if (data.types[aa] === \"word\" && ltoke === \"{\" && data.token[aa] !== \"return\" && data.token[aa] !== \"in\" && data.token[aa] !== \"import\" && data.token[aa] !== \"const\" && data.token[aa] !== \"let\" && data.token[aa] !== \"\") {\r\n                    // ES6 block\r\n                    stack = \"block\";\r\n                }\r\n                else if (ltoke === \"{\" && (data.token[aa] === \"x}\" || data.token[aa] === \"}\") && \"if|else|for|while|function|class|switch|catch|finally\".indexOf(data.stack[aa]) > -1) {\r\n                    // ES6 block\r\n                    stack = \"block\";\r\n                }\r\n                else if (data.stack[aa] === \"arguments\") {\r\n                    stack = \"function\";\r\n                }\r\n                else if (data.types[aa] === \"generic\") {\r\n                    do {\r\n                        aa = aa - 1;\r\n                        if (data.token[aa] === \"function\" || data.stack[aa] === \"arguments\") {\r\n                            stack = \"function\";\r\n                            break;\r\n                        }\r\n                        if (data.token[aa] === \"interface\") {\r\n                            stack = \"map\";\r\n                            break;\r\n                        }\r\n                        if (data.token[aa] === \";\") {\r\n                            stack = \"object\";\r\n                            break;\r\n                        }\r\n                    } while (aa > data.begin[parse.count]);\r\n                }\r\n                else if ((options.language === \"java\" || options.language === \"csharp\") && data.types[parse.count - 1] === \"reference\" && data.token[parse.count - 2] === \"]\") {\r\n                    stack = \"array\";\r\n                }\r\n                else {\r\n                    stack = \"object\";\r\n                }\r\n                if (stack !== \"object\" && stack !== \"class\") {\r\n                    if (stack === \"function\") {\r\n                        references.push(funreferences);\r\n                        funreferences = [];\r\n                    }\r\n                    else {\r\n                        references.push([]);\r\n                    }\r\n                }\r\n            }\r\n            else if (ltoke === \"[\") {\r\n                if ((/\\s/).test(c[a - 1]) === true && (data.types[aa] === \"word\" || data.types[aa] === \"reference\") && wordx !== \"return\" && options.language !== \"twig\") {\r\n                    stack = \"notation\";\r\n                }\r\n                else {\r\n                    stack = \"array\";\r\n                }\r\n            }\r\n            else if (ltoke === \"(\" || ltoke === \"x(\") {\r\n                if (wordx === \"function\" || data.token[aa - 1] === \"function\" || data.token[aa - 1] === \"function*\" || data.token[aa - 2] === \"function\") {\r\n                    stack = \"arguments\";\r\n                }\r\n                else if (data.token[aa - 1] === \".\" || data.token[data.begin[aa] - 2] === \".\") {\r\n                    stack = \"method\";\r\n                }\r\n                else if (data.types[aa] === \"generic\") {\r\n                    stack = \"method\";\r\n                }\r\n                else if (data.token[aa] === \"}\" && data.stack[aa] === \"function\") {\r\n                    stack = \"method\";\r\n                }\r\n                else if (wordx === \"if\" || wordx === \"for\" || wordx === \"class\" || wordx === \"while\" || wordx === \"catch\" || wordx === \"finally\" || wordx === \"switch\" || wordx === \"with\") {\r\n                    stack = \"expression\";\r\n                }\r\n                else if (data.types[aa] === \"word\" || data.types[aa] === \"property\" || data.types[aa] === \"reference\") {\r\n                    stack = \"method\";\r\n                }\r\n                else {\r\n                    stack = \"paren\";\r\n                }\r\n            }\r\n            recordPush(stack);\r\n            if (classy.length > 0) {\r\n                classy[classy.length - 1] = classy[classy.length - 1] + 1;\r\n            }\r\n        }, \r\n        // ES6 template string support\r\n        tempstring = function lexer_script_tempstring() {\r\n            const output = [c[a]];\r\n            a = a + 1;\r\n            if (a < b) {\r\n                do {\r\n                    output.push(c[a]);\r\n                    if (c[a] === \"`\" && (c[a - 1] !== \"\\\\\" || slashes(a - 1) === false)) {\r\n                        break;\r\n                    }\r\n                    if (c[a - 1] === \"$\" && c[a] === \"{\" && (c[a - 2] !== \"\\\\\" || slashes(a - 2) === false)) {\r\n                        break;\r\n                    }\r\n                    a = a + 1;\r\n                } while (a < b);\r\n            }\r\n            return output.join(\"\");\r\n        }, \r\n        // determines tag names for {% %} based template tags and returns a type\r\n        tname = function lexer_script_tname(x) {\r\n            let sn = 2, en = 0, name = \"\";\r\n            const st = x.slice(0, 2), len = x.length, namelist = [\r\n                \"autoescape\",\r\n                \"block\",\r\n                \"capture\",\r\n                \"case\",\r\n                \"comment\",\r\n                \"embed\",\r\n                \"filter\",\r\n                \"for\",\r\n                \"form\",\r\n                \"if\",\r\n                \"macro\",\r\n                \"paginate\",\r\n                \"raw\",\r\n                \"sandbox\",\r\n                \"spaceless\",\r\n                \"tablerow\",\r\n                \"unless\",\r\n                \"verbatim\"\r\n            ];\r\n            if (x.charAt(2) === \"-\") {\r\n                sn = sn + 1;\r\n            }\r\n            if ((/\\s/).test(x.charAt(sn)) === true) {\r\n                do {\r\n                    sn = sn + 1;\r\n                } while ((/\\s/).test(x.charAt(sn)) === true && sn < len);\r\n            }\r\n            en = sn;\r\n            do {\r\n                en = en + 1;\r\n            } while ((/\\s/).test(x.charAt(en)) === false && x.charAt(en) !== \"(\" && en < len);\r\n            if (en === len) {\r\n                en = x.length - 2;\r\n            }\r\n            name = x.slice(sn, en);\r\n            if (name === \"else\" || (st === \"{%\" && (name === \"elseif\" || name === \"when\" || name === \"elif\"))) {\r\n                return [\"template_else\", `template_${name}`];\r\n            }\r\n            if (st === \"{{\") {\r\n                if (name === \"end\") {\r\n                    return [\"template_end\", \"\"];\r\n                }\r\n                if ((name === \"block\" && (/\\{%\\s*\\w/).test(source) === false) || name === \"define\" || name === \"form\" || name === \"if\" || name === \"range\" || name === \"with\") {\r\n                    return [\"template_start\", `template_${name}`];\r\n                }\r\n                return [\"template\", \"\"];\r\n            }\r\n            en = namelist.length - 1;\r\n            if (en > -1) {\r\n                do {\r\n                    if (name === namelist[en] && (name !== \"block\" || (/\\{%\\s*\\w/).test(source) === false)) {\r\n                        return [\"template_start\", `template_${name}`];\r\n                    }\r\n                    if (name === \"end\" + namelist[en]) {\r\n                        return [\"template_end\", \"\"];\r\n                    }\r\n                    en = en - 1;\r\n                } while (en > -1);\r\n            }\r\n            return [\"template\", \"\"];\r\n        }, \r\n        // remove \"vart\" object data\r\n        vartpop = function lexer_script_vartpop() {\r\n            vart\r\n                .count\r\n                .pop();\r\n            vart\r\n                .index\r\n                .pop();\r\n            vart\r\n                .word\r\n                .pop();\r\n            vart.len = vart.len - 1;\r\n        }, \r\n        // A lexer for keywords, reserved words, and variables\r\n        word = function lexer_script_word() {\r\n            let f = wordTest, g = 1, output = \"\", nextitem = \"\", tokel = ltoke, typel = ltype;\r\n            const lex = [], elsefix = function lexer_script_word_elsefix() {\r\n                brace.push(\"x{\");\r\n                parse.splice({\r\n                    data: data,\r\n                    howmany: 1,\r\n                    index: parse.count - 3\r\n                });\r\n            }, hoisting = function lexer_script_word_hoisting(index, ref, samescope) {\r\n                const begin = data.begin[index];\r\n                let parent = 0;\r\n                do {\r\n                    if (data.token[index] === ref && data.types[index] === \"word\") {\r\n                        if (samescope === true) {\r\n                            // the simple state is for hoisted references, var and function declarations\r\n                            data.types[index] = \"reference\";\r\n                        }\r\n                        else if (data.begin[index] > begin && data.token[data.begin[index]] === \"{\" && data.stack[index] !== \"object\" && data.stack[index] !== \"class\" && data.stack[index] !== \"data_type\") {\r\n                            // the complex state is for non-hoisted references living in prior functions of the same parent scope\r\n                            if (data.stack[index] === \"function\") {\r\n                                data.types[index] = \"reference\";\r\n                            }\r\n                            else {\r\n                                // this looping is necessary to determine if there is a function between the reference and the declared scope\r\n                                parent = data.begin[index];\r\n                                do {\r\n                                    if (data.stack[parent] === \"function\") {\r\n                                        data.types[index] = \"reference\";\r\n                                        break;\r\n                                    }\r\n                                    parent = data.begin[parent];\r\n                                } while (parent > begin);\r\n                            }\r\n                        }\r\n                    }\r\n                    index = index - 1;\r\n                } while (index > begin);\r\n            };\r\n            do {\r\n                lex.push(c[f]);\r\n                if (c[f] === \"\\\\\") {\r\n                    sparser.parseerror = `Illegal escape in JavaScript on line number ${parse.lineNumber}`;\r\n                }\r\n                f = f + 1;\r\n            } while (f < a);\r\n            if (ltoke.charAt(0) === \"\\u201c\") {\r\n                sparser.parseerror = `Quote looking character (\\u201c, \\\\u201c) used instead of actual quotes on line number ${parse.lineNumber}`;\r\n            }\r\n            else if (ltoke.charAt(0) === \"\\u201d\") {\r\n                sparser.parseerror = `Quote looking character (\\u201d, \\\\u201d) used instead of actual quotes on line number ${parse.lineNumber}`;\r\n            }\r\n            output = lex.join(\"\");\r\n            wordTest = -1;\r\n            if (parse.count > 0 && output === \"function\" && data.token[parse.count] === \"(\" && (data.token[parse.count - 1] === \"{\" || data.token[parse.count - 1] === \"x{\")) {\r\n                data.types[parse.count] = \"start\";\r\n            }\r\n            if (parse.count > 1 && output === \"function\" && ltoke === \"(\" && (data.token[parse.count - 1] === \"}\" || data.token[parse.count - 1] === \"x}\")) {\r\n                if (data.token[parse.count - 1] === \"}\") {\r\n                    f = parse.count - 2;\r\n                    if (f > -1) {\r\n                        do {\r\n                            if (data.types[f] === \"end\") {\r\n                                g = g + 1;\r\n                            }\r\n                            else if (data.types[f] === \"start\" || data.types[f] === \"end\") {\r\n                                g = g - 1;\r\n                            }\r\n                            if (g === 0) {\r\n                                break;\r\n                            }\r\n                            f = f - 1;\r\n                        } while (f > -1);\r\n                    }\r\n                    if (data.token[f] === \"{\" && data.token[f - 1] === \")\") {\r\n                        g = 1;\r\n                        f = f - 2;\r\n                        if (f > -1) {\r\n                            do {\r\n                                if (data.types[f] === \"end\") {\r\n                                    g = g + 1;\r\n                                }\r\n                                else if (data.types[f] === \"start\" || data.types[f] === \"end\") {\r\n                                    g = g - 1;\r\n                                }\r\n                                if (g === 0) {\r\n                                    break;\r\n                                }\r\n                                f = f - 1;\r\n                            } while (f > -1);\r\n                        }\r\n                        if (data.token[f - 1] !== \"function\" && data.token[f - 2] !== \"function\") {\r\n                            data.types[parse.count] = \"start\";\r\n                        }\r\n                    }\r\n                }\r\n                else {\r\n                    data.types[parse.count] = \"start\";\r\n                }\r\n            }\r\n            if (options.correct === true && (output === \"Object\" || output === \"Array\") && c[a + 1] === \"(\" && c[a + 2] === \")\" && data.token[parse.count - 1] === \"=\" && data.token[parse.count] === \"new\") {\r\n                if (output === \"Object\") {\r\n                    data.token[parse.count] = \"{\";\r\n                    ltoke = \"}\";\r\n                    data.stack[parse.count] = \"object\";\r\n                    parse.structure[parse.structure.length - 1][0] = \"object\";\r\n                }\r\n                else {\r\n                    data.token[parse.count] = \"[\";\r\n                    ltoke = \"]\";\r\n                    data.stack[parse.count] = \"array\";\r\n                    parse.structure[parse.structure.length - 1][0] = \"array\";\r\n                }\r\n                data.types[parse.count] = \"start\";\r\n                ltype = \"end\";\r\n                c[a + 1] = \"\";\r\n                c[a + 2] = \"\";\r\n                a = a + 2;\r\n            }\r\n            else {\r\n                g = parse.count;\r\n                f = g;\r\n                if (options.lexer_options.script.variable_list !== \"none\" && (output === \"var\" || output === \"let\" || output === \"const\")) {\r\n                    if (data.types[g] === \"comment\") {\r\n                        do {\r\n                            g = g - 1;\r\n                        } while (g > 0 && (data.types[g] === \"comment\"));\r\n                    }\r\n                    if (options.lexer_options.script.variable_list === \"list\" && vart.len > -1 && vart.index[vart.len] === g && output === vart.word[vart.len]) {\r\n                        ltoke = \",\";\r\n                        ltype = \"separator\";\r\n                        data.token[g] = ltoke;\r\n                        data.types[g] = ltype;\r\n                        vart.count[vart.len] = 0;\r\n                        vart.index[vart.len] = g;\r\n                        vart.word[vart.len] = output;\r\n                        return;\r\n                    }\r\n                    vart.len = vart.len + 1;\r\n                    vart\r\n                        .count\r\n                        .push(0);\r\n                    vart\r\n                        .index\r\n                        .push(g);\r\n                    vart\r\n                        .word\r\n                        .push(output);\r\n                    g = f;\r\n                }\r\n                else if (vart.len > -1 && output !== vart.word[vart.len] && parse.count === vart.index[vart.len] && data.token[vart.index[vart.len]] === \";\" && ltoke !== vart.word[vart.len] && options.lexer_options.script.variable_list === \"list\") {\r\n                    vartpop();\r\n                }\r\n                if (output === \"from\" && data.token[parse.count] === \"x;\" && data.token[parse.count - 1] === \"}\") {\r\n                    asifix();\r\n                }\r\n                if (output === \"while\" && data.token[parse.count] === \"x;\" && data.token[parse.count - 1] === \"}\") {\r\n                    let d = 0, e = parse.count - 2;\r\n                    if (e > -1) {\r\n                        do {\r\n                            if (data.types[e] === \"end\") {\r\n                                d = d + 1;\r\n                            }\r\n                            else if (data.types[e] === \"start\") {\r\n                                d = d - 1;\r\n                            }\r\n                            if (d < 0) {\r\n                                if (data.token[e] === \"{\" && data.token[e - 1] === \"do\") {\r\n                                    asifix();\r\n                                }\r\n                                return;\r\n                            }\r\n                            e = e - 1;\r\n                        } while (e > -1);\r\n                    }\r\n                }\r\n                if (typel === \"comment\") {\r\n                    let d = parse.count;\r\n                    do {\r\n                        d = d - 1;\r\n                    } while (d > 0 && data.types[d] === \"comment\");\r\n                    typel = data.types[d];\r\n                    tokel = data.token[d];\r\n                }\r\n                nextitem = nextchar(2, false);\r\n                if (output === \"void\") {\r\n                    if (tokel === \":\" && data.stack[parse.count - 1] === \"arguments\") {\r\n                        ltype = \"type\";\r\n                    }\r\n                    else {\r\n                        ltype = \"word\";\r\n                    }\r\n                }\r\n                else if ((options.language === \"java\" || options.language === \"csharp\") && output === \"static\") {\r\n                    ltype = \"word\";\r\n                }\r\n                else if ((parse.structure[parse.structure.length - 1][0] === \"object\" ||\r\n                    parse.structure[parse.structure.length - 1][0] === \"class\" ||\r\n                    parse.structure[parse.structure.length - 1][0] === \"data_type\") && (data.token[parse.count] === \"{\" ||\r\n                    (data.token[data.begin[parse.count]] === \"{\" && data.token[parse.count] === \",\") ||\r\n                    (data.types[parse.count] === \"template_end\" && (data.token[data.begin[parse.count] - 1] === \"{\" || data.token[data.begin[parse.count] - 1] === \",\")))) {\r\n                    if (output === \"return\" || output === \"break\") {\r\n                        ltype = \"word\";\r\n                    }\r\n                    else {\r\n                        ltype = \"property\";\r\n                    }\r\n                }\r\n                else if (datatype[datatype.length - 1] === true || ((options.language === \"typescript\" || options.language === \"flow\") && tokel === \"type\")) {\r\n                    ltype = \"type\";\r\n                }\r\n                else if ((options.language === \"java\" || options.language === \"csharp\") && (tokel === \"public\" || tokel === \"private\" || tokel === \"static\" || tokel === \"final\")) {\r\n                    ltype = \"reference\";\r\n                }\r\n                else if ((options.language === \"java\" || options.language === \"csharp\") && ltoke !== \"var\" && (ltype === \"end\" || ltype === \"word\") && nextitem.charAt(0) === \"=\" && nextitem.charAt(1) !== \"=\") {\r\n                    ltype = \"reference\";\r\n                }\r\n                else if (references.length > 0 && (tokel === \"function\" || tokel === \"class\" || tokel === \"const\" || tokel === \"let\" || tokel === \"var\" || tokel === \"new\" || tokel === \"void\")) {\r\n                    ltype = \"reference\";\r\n                    references[references.length - 1].push(output);\r\n                    if (options.language === \"javascript\" || options.language === \"jsx\" || options.language === \"typescript\" || options.language === \"flow\") {\r\n                        if (tokel === \"var\" || (tokel === \"function\" && data.types[parse.count - 1] !== \"operator\" && data.types[parse.count - 1] !== \"start\" && data.types[parse.count - 1] !== \"end\")) {\r\n                            hoisting(parse.count, output, true);\r\n                        }\r\n                        else {\r\n                            hoisting(parse.count, output, false);\r\n                        }\r\n                    }\r\n                    else {\r\n                        hoisting(parse.count, output, false);\r\n                    }\r\n                }\r\n                else if (parse.structure[parse.structure.length - 1][0] === \"arguments\" && ltype !== \"operator\") {\r\n                    ltype = \"reference\";\r\n                    funreferences.push(output);\r\n                }\r\n                else if (tokel === \",\" && data.stack[parse.count] !== \"method\" && (data.stack[parse.count] !== \"expression\" || data.token[data.begin[parse.count] - 1] === \"for\")) {\r\n                    let d = parse.count;\r\n                    const e = parse.structure[parse.structure.length - 1][1];\r\n                    do {\r\n                        if (data.begin[d] === e) {\r\n                            if (data.token[d] === \";\") {\r\n                                break;\r\n                            }\r\n                            if (data.token[d] === \"var\" || data.token[d] === \"let\" || data.token[d] === \"const\" || data.token[d] === \"type\") {\r\n                                break;\r\n                            }\r\n                        }\r\n                        else if (data.types[d] === \"end\") {\r\n                            d = data.begin[d];\r\n                        }\r\n                        d = d - 1;\r\n                    } while (d > e);\r\n                    if (references.length > 0 && data.token[d] === \"var\") {\r\n                        ltype = \"reference\";\r\n                        references[references.length - 1].push(output);\r\n                        if (options.language === \"javascript\" || options.language === \"jsx\" || options.language === \"typescript\" || options.language === \"flow\") {\r\n                            hoisting(d, output, true);\r\n                        }\r\n                        else {\r\n                            hoisting(d, output, false);\r\n                        }\r\n                    }\r\n                    else if (references.length > 0 && (data.token[d] === \"let\" || data.token[d] === \"const\" || (data.token[d] === \"type\" && (options.language === \"typescript\" || options.language === \"flow\")))) {\r\n                        ltype = \"reference\";\r\n                        references[references.length - 1].push(output);\r\n                        hoisting(d, output, false);\r\n                    }\r\n                    else {\r\n                        ltype = \"word\";\r\n                    }\r\n                }\r\n                else if (parse.structure[parse.structure.length - 1][0] !== \"object\" || (parse.structure[parse.structure.length - 1][0] === \"object\" && ltoke !== \",\" && ltoke !== \"{\")) {\r\n                    let d = references.length, e = 0;\r\n                    if (d > 0) {\r\n                        do {\r\n                            d = d - 1;\r\n                            e = references[d].length;\r\n                            if (e > 0) {\r\n                                do {\r\n                                    e = e - 1;\r\n                                    if (output === references[d][e]) {\r\n                                        break;\r\n                                    }\r\n                                } while (e > 0);\r\n                                if (output === references[d][e]) {\r\n                                    break;\r\n                                }\r\n                            }\r\n                        } while (d > 0);\r\n                        if (references[d][e] === output && tokel !== \".\") {\r\n                            ltype = \"reference\";\r\n                        }\r\n                        else {\r\n                            ltype = \"word\";\r\n                        }\r\n                    }\r\n                    else {\r\n                        ltype = \"word\";\r\n                    }\r\n                }\r\n                else {\r\n                    ltype = \"word\";\r\n                }\r\n                ltoke = output;\r\n                if (output === \"from\" && data.token[parse.count] === \"}\") {\r\n                    asifix();\r\n                }\r\n            }\r\n            recordPush(\"\");\r\n            if (output === \"class\") {\r\n                classy.push(0);\r\n            }\r\n            if (output === \"do\") {\r\n                nextitem = nextchar(1, true);\r\n                if (nextitem !== \"{\") {\r\n                    ltoke = (options.correct === true)\r\n                        ? \"{\"\r\n                        : \"x{\";\r\n                    ltype = \"start\";\r\n                    brace.push(\"x{\");\r\n                    recordPush(\"do\");\r\n                }\r\n            }\r\n            if (output === \"else\") {\r\n                nextitem = nextchar(2, true);\r\n                let x = parse.count - 1;\r\n                if (data.types[x] === \"comment\") {\r\n                    do {\r\n                        x = x - 1;\r\n                    } while (x > 0 && data.types[x] === \"comment\");\r\n                }\r\n                if (data.token[x] === \"x}\") {\r\n                    if (data.token[parse.count] === \"else\") {\r\n                        if (data.stack[parse.count - 1] !== \"if\" && data.types[parse.count - 1] !== \"comment\" && data.stack[parse.count - 1] !== \"else\") {\r\n                            brace.pop();\r\n                            parse.splice({\r\n                                data: data,\r\n                                howmany: 0,\r\n                                index: parse.count - 1,\r\n                                record: {\r\n                                    begin: data.begin[data.begin[data.begin[parse.count - 1] - 1] - 1],\r\n                                    ender: -1,\r\n                                    lexer: \"script\",\r\n                                    lines: 0,\r\n                                    stack: \"if\",\r\n                                    token: (options.correct === true)\r\n                                        ? \"}\"\r\n                                        : \"x}\",\r\n                                    types: \"end\"\r\n                                }\r\n                            });\r\n                            if (parse.structure.length > 1) {\r\n                                parse.structure.splice(parse.structure.length - 2, 1);\r\n                                parse.structure[parse.structure.length - 1][1] = parse.count;\r\n                            }\r\n                        }\r\n                        else if (data.token[parse.count - 2] === \"x}\" && pstack[0] !== \"if\" && data.stack[parse.count] === \"else\") {\r\n                            elsefix();\r\n                        }\r\n                        else if (data.token[parse.count - 2] === \"}\" && data.stack[parse.count - 2] === \"if\" && pstack[0] === \"if\" && data.token[pstack[1] - 1] !== \"if\" && data.token[data.begin[parse.count - 1]] === \"x{\") {\r\n                            // fixes when \"else\" is following a block that isn't \"if\"\r\n                            elsefix();\r\n                        }\r\n                    }\r\n                    else if (data.token[parse.count] === \"x}\" && data.stack[parse.count] === \"if\") {\r\n                        elsefix();\r\n                    }\r\n                }\r\n                if (nextitem !== \"if\" && nextitem.charAt(0) !== \"{\") {\r\n                    ltoke = (options.correct === true)\r\n                        ? \"{\"\r\n                        : \"x{\";\r\n                    ltype = \"start\";\r\n                    brace.push(\"x{\");\r\n                    recordPush(\"else\");\r\n                }\r\n            }\r\n            if ((output === \"for\" || output === \"if\" || output === \"switch\" || output === \"catch\") && options.language !== \"twig\" && data.token[parse.count - 1] !== \".\") {\r\n                nextitem = nextchar(1, true);\r\n                if (nextitem !== \"(\") {\r\n                    paren = parse.count;\r\n                    if (options.correct === true) {\r\n                        start(\"(\");\r\n                    }\r\n                    else {\r\n                        start(\"x(\");\r\n                    }\r\n                }\r\n            }\r\n        };\r\n        do {\r\n            if ((/\\s/).test(c[a]) === true) {\r\n                if (wordTest > -1) {\r\n                    word();\r\n                }\r\n                a = parse.spacer({ array: c, end: b, index: a });\r\n                if (parse.linesSpace > 1 && ltoke !== \";\" && lengthb < parse.count && c[a + 1] !== \"}\") {\r\n                    asi(false);\r\n                    lengthb = parse.count;\r\n                }\r\n            }\r\n            else if (c[a] === \"<\" && c[a + 1] === \"?\" && c[a + 2] === \"p\" && c[a + 3] === \"h\" && c[a + 4] === \"p\") {\r\n                // php\r\n                general(\"<?php\", \"?>\", \"template\");\r\n            }\r\n            else if (c[a] === \"<\" && c[a + 1] === \"?\" && c[a + 2] === \"=\") {\r\n                // php\r\n                general(\"<?=\", \"?>\", \"template\");\r\n            }\r\n            else if (c[a] === \"<\" && c[a + 1] === \"%\") {\r\n                // asp\r\n                general(\"<%\", \"%>\", \"template\");\r\n            }\r\n            else if (c[a] === \"{\" && c[a + 1] === \"%\") {\r\n                // twig\r\n                general(\"{%\", \"%}\", \"template\");\r\n            }\r\n            else if (c[a] === \"{\" && c[a + 1] === \"{\" && c[a + 2] === \"{\") {\r\n                // mustache\r\n                general(\"{{{\", \"}}}\", \"template\");\r\n            }\r\n            else if (c[a] === \"{\" && c[a + 1] === \"{\") {\r\n                // handlebars\r\n                general(\"{{\", \"}}\", \"template\");\r\n            }\r\n            else if (c[a] === \"<\" && c[a + 1] === \"!\" && c[a + 2] === \"-\" && c[a + 3] === \"-\" && c[a + 4] === \"#\") {\r\n                // ssi\r\n                general(\"<!--#\", \"-->\", \"template\");\r\n            }\r\n            else if (c[a] === \"<\" && c[a + 1] === \"!\" && c[a + 2] === \"-\" && c[a + 3] === \"-\") {\r\n                // markup comment\r\n                general(\"<!--\", \"-->\", \"comment\");\r\n            }\r\n            else if (c[a] === \"<\") {\r\n                // markup\r\n                markup();\r\n            }\r\n            else if (c[a] === \"/\" && (a === b - 1 || c[a + 1] === \"*\")) {\r\n                // comment block\r\n                blockComment();\r\n            }\r\n            else if ((parse.count < 0 || data.lines[parse.count] > 0) && c[a] === \"#\" && c[a + 1] === \"!\" && (c[a + 2] === \"/\" || c[a + 2] === \"[\")) {\r\n                // shebang\r\n                general(\"#!\" + c[a + 2], \"\\n\", \"string\");\r\n            }\r\n            else if (c[a] === \"/\" && (a === b - 1 || c[a + 1] === \"/\")) {\r\n                // comment line\r\n                lineComment();\r\n            }\r\n            else if (c[a] === \"#\" && c[a + 1] === \"r\" && c[a + 2] === \"e\" && c[a + 3] === \"g\" && c[a + 4] === \"i\" && c[a + 5] === \"o\" && c[a + 6] === \"n\" && (/\\s/).test(c[a + 7]) === true) {\r\n                // comment line\r\n                asi(false);\r\n                general(\"#region\", \"\\n\", \"comment\");\r\n            }\r\n            else if (c[a] === \"#\" && c[a + 1] === \"e\" && c[a + 2] === \"n\" && c[a + 3] === \"d\" && c[a + 4] === \"r\" && c[a + 5] === \"e\" && c[a + 6] === \"g\" && c[a + 7] === \"i\" && c[a + 8] === \"o\" && c[a + 9] === \"n\") {\r\n                // comment line\r\n                asi(false);\r\n                general(\"#endregion\", \"\\n\", \"comment\");\r\n            }\r\n            else if (c[a] === \"`\" || (c[a] === \"}\" && parse.structure[parse.structure.length - 1][0] === \"template_string\")) {\r\n                // template string\r\n                if (wordTest > -1) {\r\n                    word();\r\n                }\r\n                ltoke = tempstring();\r\n                if (ltoke.charAt(0) === \"}\" && ltoke.slice(ltoke.length - 2) === \"${\") {\r\n                    ltype = \"template_string_else\";\r\n                    recordPush(\"template_string\");\r\n                }\r\n                else if (ltoke.slice(ltoke.length - 2) === \"${\") {\r\n                    ltype = \"template_string_start\";\r\n                    recordPush(\"template_string\");\r\n                }\r\n                else if (ltoke.charAt(0) === \"}\") {\r\n                    ltype = \"template_string_end\";\r\n                    recordPush(\"\");\r\n                }\r\n                else {\r\n                    ltype = \"string\";\r\n                    recordPush(\"\");\r\n                }\r\n            }\r\n            else if (c[a] === \"\\\"\" || c[a] === \"'\") {\r\n                // string\r\n                general(c[a], c[a], \"string\");\r\n            }\r\n            else if (c[a] === \"-\" &&\r\n                (a < b - 1 && c[a + 1] !== \"=\" && c[a + 1] !== \"-\") &&\r\n                (ltype === \"number\" || ltype === \"word\" || ltype === \"reference\") &&\r\n                ltoke !== \"return\" &&\r\n                (ltoke === \")\" || ltoke === \"]\" || ltype === \"word\" || ltype === \"reference\" || ltype === \"number\")) {\r\n                // subtraction\r\n                if (wordTest > -1) {\r\n                    word();\r\n                }\r\n                ltoke = \"-\";\r\n                ltype = \"operator\";\r\n                recordPush(\"\");\r\n            }\r\n            else if (wordTest === -1 && (c[a] !== \"0\" || (c[a] === \"0\" && c[a + 1] !== \"b\")) && ((/\\d/).test(c[a]) || (a !== b - 2 && c[a] === \"-\" && c[a + 1] === \".\" && (/\\d/).test(c[a + 2])) || (a !== b - 1 && (c[a] === \"-\" || c[a] === \".\") && (/\\d/).test(c[a + 1])))) {\r\n                // number\r\n                if (wordTest > -1) {\r\n                    word();\r\n                }\r\n                if (ltype === \"end\" && c[a] === \"-\") {\r\n                    ltoke = \"-\";\r\n                    ltype = \"operator\";\r\n                }\r\n                else {\r\n                    ltoke = numb();\r\n                    ltype = \"number\";\r\n                }\r\n                recordPush(\"\");\r\n            }\r\n            else if (c[a] === \":\" && c[a + 1] === \":\") {\r\n                if (wordTest > -1) {\r\n                    word();\r\n                }\r\n                if (options.correct === true) {\r\n                    plusplus();\r\n                }\r\n                asifix();\r\n                a = a + 1;\r\n                ltoke = \"::\";\r\n                ltype = \"separator\";\r\n                recordPush(\"\");\r\n            }\r\n            else if (c[a] === \",\") {\r\n                // comma\r\n                if (wordTest > -1) {\r\n                    word();\r\n                }\r\n                if (options.correct === true) {\r\n                    plusplus();\r\n                }\r\n                if (datatype[datatype.length - 1] === true && data.stack[parse.count].indexOf(\"type\") < 0) {\r\n                    datatype[datatype.length - 1] = false;\r\n                }\r\n                if (ltype === \"comment\") {\r\n                    commaComment();\r\n                }\r\n                else if (vart.len > -1 && vart.count[vart.len] === 0 && options.lexer_options.script.variable_list === \"each\") {\r\n                    asifix();\r\n                    ltoke = \";\";\r\n                    ltype = \"separator\";\r\n                    recordPush(\"\");\r\n                    ltoke = vart.word[vart.len];\r\n                    ltype = \"word\";\r\n                    recordPush(\"\");\r\n                    vart.index[vart.len] = parse.count;\r\n                }\r\n                else {\r\n                    ltoke = \",\";\r\n                    ltype = \"separator\";\r\n                    asifix();\r\n                    recordPush(\"\");\r\n                }\r\n            }\r\n            else if (c[a] === \".\") {\r\n                // period\r\n                if (wordTest > -1) {\r\n                    word();\r\n                }\r\n                datatype[datatype.length - 1] = false;\r\n                if (c[a + 1] === \".\" && c[a + 2] === \".\") {\r\n                    ltoke = \"...\";\r\n                    ltype = \"operator\";\r\n                    a = a + 2;\r\n                }\r\n                else {\r\n                    asifix();\r\n                    ltoke = \".\";\r\n                    ltype = \"separator\";\r\n                }\r\n                if ((/\\s/).test(c[a - 1]) === true) {\r\n                    parse.linesSpace = 1;\r\n                }\r\n                recordPush(\"\");\r\n            }\r\n            else if (c[a] === \";\") {\r\n                // semicolon\r\n                if (wordTest > -1) {\r\n                    word();\r\n                }\r\n                if (datatype[datatype.length - 1] === true && data.stack[parse.count].indexOf(\"type\") < 0) {\r\n                    datatype[datatype.length - 1] = false;\r\n                }\r\n                if (options.language === \"qml\") {\r\n                    ltoke = (options.correct === true)\r\n                        ? \";\"\r\n                        : \"x;\";\r\n                    ltype = \"separator\";\r\n                    recordPush(\"\");\r\n                }\r\n                else {\r\n                    if (classy[classy.length - 1] === 0) {\r\n                        classy.pop();\r\n                    }\r\n                    if (vart.len > -1 && vart.count[vart.len] === 0) {\r\n                        if (options.lexer_options.script.variable_list === \"each\") {\r\n                            vartpop();\r\n                        }\r\n                        else {\r\n                            vart.index[vart.len] = parse.count + 1;\r\n                        }\r\n                    }\r\n                    if (options.correct === true) {\r\n                        plusplus();\r\n                    }\r\n                    ltoke = \";\";\r\n                    ltype = \"separator\";\r\n                    if (data.token[parse.count] === \"x}\") {\r\n                        asibrace();\r\n                    }\r\n                    else {\r\n                        recordPush(\"\");\r\n                    }\r\n                }\r\n                blockinsert();\r\n            }\r\n            else if (c[a] === \"(\" || c[a] === \"[\" || c[a] === \"{\") {\r\n                start(c[a]);\r\n            }\r\n            else if (c[a] === \")\" || c[a] === \"]\" || c[a] === \"}\") {\r\n                end(c[a]);\r\n            }\r\n            else if (c[a] === \"*\" && data.stack[parse.count] === \"object\" && wordTest < 0 && (/\\s/).test(c[a + 1]) === false && c[a + 1] !== \"=\" && (/\\d/).test(c[a + 1]) === false) {\r\n                wordTest = a;\r\n            }\r\n            else if (c[a] === \"=\" || c[a] === \"&\" || c[a] === \"<\" || c[a] === \">\" || c[a] === \"+\" || c[a] === \"-\" || c[a] === \"*\" || c[a] === \"/\" || c[a] === \"!\" || c[a] === \"?\" || c[a] === \"|\" || c[a] === \"^\" || c[a] === \":\" || c[a] === \"%\" || c[a] === \"~\") {\r\n                // operator\r\n                ltoke = operator();\r\n                if (ltoke === \"regex\") {\r\n                    ltoke = data.token[parse.count];\r\n                }\r\n                else if (ltoke === \"*\" && data.token[parse.count] === \"function\") {\r\n                    data.token[parse.count] = \"function*\";\r\n                }\r\n                else {\r\n                    ltype = \"operator\";\r\n                    if (ltoke !== \"!\" && ltoke !== \"++\" && ltoke !== \"--\") {\r\n                        asifix();\r\n                    }\r\n                    recordPush(\"\");\r\n                }\r\n            }\r\n            else if (wordTest < 0 && c[a] !== \"\") {\r\n                wordTest = a;\r\n            }\r\n            if (vart.len > -1 && parse.count === vart.index[vart.len] + 1 && data.token[vart.index[vart.len]] === \";\" && ltoke !== vart.word[vart.len] && ltype !== \"comment\" && options.lexer_options.script.variable_list === \"list\") {\r\n                vartpop();\r\n            }\r\n            a = a + 1;\r\n        } while (a < b);\r\n        if (wordTest > -1) {\r\n            word();\r\n        }\r\n        if (((data.token[parse.count] !== \"}\" && data.token[0] === \"{\") || data.token[0] !== \"{\") && ((data.token[parse.count] !== \"]\" && data.token[0] === \"[\") || data.token[0] !== \"[\")) {\r\n            asi(false);\r\n        }\r\n        if (sourcemap[0] === parse.count) {\r\n            ltoke = \"\\n\" + sourcemap[1];\r\n            ltype = \"string\";\r\n            recordPush(\"\");\r\n        }\r\n        if (data.token[parse.count] === \"x;\" && (data.token[parse.count - 1] === \"}\" || data.token[parse.count - 1] === \"]\") && data.begin[parse.count - 1] === 0) {\r\n            parse.pop(data);\r\n        }\r\n        return data;\r\n    };\r\n    sparser.lexers.script = script;\r\n}());\r\n(function markup_init() {\r\n    \r\n    const markup = function lexer_markup(source) {\r\n        let a = 0, sgmlflag = 0, html = \"\", cftransaction = false, ext = false;\r\n        const parse = sparser.parse, data = parse.data, count = {\r\n            end: 0,\r\n            index: -1,\r\n            start: 0\r\n        }, options = sparser.options, b = source.split(\"\"), c = b.length, htmlblocks = {\r\n            body: \"block\",\r\n            colgroup: \"block\",\r\n            dd: \"block\",\r\n            dt: \"block\",\r\n            head: \"block\",\r\n            html: \"block\",\r\n            li: \"block\",\r\n            option: \"block\",\r\n            p: \"block\",\r\n            tbody: \"block\",\r\n            td: \"block\",\r\n            tfoot: \"block\",\r\n            th: \"block\",\r\n            thead: \"block\",\r\n            tr: \"block\",\r\n        }, attribute_sort_list = (typeof options.lexer_options.markup.attribute_sort_list === \"string\" && options.lexer_options.markup.attribute_sort_list !== \"\")\r\n            ? options.lexer_options.markup.attribute_sort_list.split(\",\")\r\n            : [], asl = attribute_sort_list.length, \r\n        //pads certain template tag delimiters with a space\r\n        bracketSpace = function lexer_markup_bracketSpace(input) {\r\n            if (options.language !== \"html\" && options.language !== \"xml\" && options.language !== \"sgml\" && options.language !== \"jsx\") {\r\n                const spaceStart = function lexer_markup_tag_spaceStart(start) {\r\n                    return start.replace(/\\s*$/, \" \");\r\n                }, spaceEnd = function lexer_markup_tag_spaceStart(end) {\r\n                    return end.replace(/^\\s*/, \" \");\r\n                };\r\n                if ((/\\{(=|#|\\/|(%>)|(%\\]))/).test(input) === true || (/\\}%(>|\\])/).test(input) === true) {\r\n                    return input;\r\n                }\r\n                input = input.replace(/\\{((\\{+)|%-?)\\s*/g, spaceStart);\r\n                input = input.replace(/\\s*((\\}\\}+)|(-?%\\}))/g, spaceEnd);\r\n                return input;\r\n            }\r\n            return input;\r\n        }, \r\n        // pushes a record into the parse table\r\n        recordPush = function lexer_markup_recordPush(target, record, structure) {\r\n            if (target === data) {\r\n                if (record.types.indexOf(\"end\") > -1) {\r\n                    count.end = count.end + 1;\r\n                }\r\n                else if (record.types.indexOf(\"start\") > -1) {\r\n                    count.start = count.start + 1;\r\n                }\r\n            }\r\n            if (options.lexer_options.markup.parse_space === true) {\r\n                record.lines = 0;\r\n            }\r\n            parse.push(target, record, structure);\r\n        }, \r\n        // Find the lowercase tag name of the provided token.\r\n        tagName = function lexer_markup_tagName(el) {\r\n            let space = 0, name = \"\";\r\n            const reg = (/^((\\{|<)((%-?)|\\{-?)=?\\s*)/);\r\n            if (typeof el !== \"string\") {\r\n                return \"\";\r\n            }\r\n            space = el\r\n                .replace(reg, \"%\")\r\n                .replace(/\\s+/, \" \")\r\n                .indexOf(\" \");\r\n            name = el.replace(reg, \" \");\r\n            name = (space < 0)\r\n                ? name.slice(1, el.length - 1)\r\n                : name.slice(1, space);\r\n            if (html === \"html\" || options.language === \"coldfusion\") {\r\n                name = name.toLowerCase();\r\n            }\r\n            name = name.replace(/(\\}\\})$/, \"\");\r\n            if (name.indexOf(\"(\") > 0) {\r\n                name = name.slice(0, name.indexOf(\"(\"));\r\n            }\r\n            if (name === \"?xml?\") {\r\n                return \"xml\";\r\n            }\r\n            return name;\r\n        }, \r\n        // A fix for HTML missing end tags\r\n        fixHtmlEnd = function lexer_markup_fixHtmlEnd(element, end) {\r\n            const tname = tagName(element), record = {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"markup\",\r\n                lines: (data.lines[parse.count] > 0) ? 1 : 0,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: `</${parse.structure[parse.structure.length - 1][0]}>`,\r\n                types: \"end\"\r\n            };\r\n            recordPush(data, record, \"\");\r\n            if (htmlblocks[parse.structure[parse.structure.length - 1][0]] === \"block\" && ((end === true && parse.structure.length > 1) || (end === false && `/${parse.structure[parse.structure.length - 1][0]}` !== tname))) {\r\n                do {\r\n                    record.begin = parse.structure[parse.structure.length - 1][1];\r\n                    record.stack = parse.structure[parse.structure.length - 1][0];\r\n                    record.token = `</${parse.structure[parse.structure.length - 1][0]}>`;\r\n                    recordPush(data, record, \"\");\r\n                } while (htmlblocks[parse.structure[parse.structure.length - 1][0]] === \"block\" && ((end === true && parse.structure.length > 1) || (end === false && `/${parse.structure[parse.structure.length - 1][0]}` !== tname)));\r\n            }\r\n        }, \r\n        // A fix for Vapor Leaf end structure parsing\r\n        vaporEnd = function lexer_markup_vaporEnd() {\r\n            const liner = parse.linesSpace, rec = {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"markup\",\r\n                lines: liner,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: \"}\",\r\n                types: \"template_end\"\r\n            };\r\n            let aa = a + 1;\r\n            if ((/\\s/).test(b[aa]) === true) {\r\n                aa = parse.spacer({ array: b, end: c, index: aa }) + 1;\r\n            }\r\n            if (b[aa] === \"e\" && b[aa + 1] === \"l\" && b[aa + 2] === \"s\" && b[aa + 3] === \"e\") {\r\n                if (b[aa + 4] === \"{\") {\r\n                    rec.token = \"} else {\";\r\n                    rec.types = \"template_else\";\r\n                    recordPush(data, rec, \"else\");\r\n                    a = aa;\r\n                    return;\r\n                }\r\n                if ((/\\s/).test(b[aa + 4]) === true) {\r\n                    aa = parse.spacer({ array: b, end: c, index: aa + 4 }) + 1;\r\n                    if (b[aa] === \"{\") {\r\n                        rec.token = \"} else {\";\r\n                        rec.types = \"template_else\";\r\n                        recordPush(data, rec, \"else\");\r\n                        a = aa;\r\n                        return;\r\n                    }\r\n                    if (b[aa] === \"i\" && b[aa + 1] === \"f\") {\r\n                        aa = aa + 2;\r\n                        if ((/\\s/).test(b[aa]) === true) {\r\n                            aa = parse.spacer({ array: b, end: c, index: aa }) + 1;\r\n                        }\r\n                        if (b[aa] === \"(\") {\r\n                            let paren = 0;\r\n                            do {\r\n                                if (b[aa] === \"(\") {\r\n                                    paren = paren + 1;\r\n                                }\r\n                                else if (b[aa] === \")\") {\r\n                                    paren = paren - 1;\r\n                                    if (paren < 1) {\r\n                                        aa = aa + 1;\r\n                                        break;\r\n                                    }\r\n                                }\r\n                                aa = aa + 1;\r\n                            } while (aa < c);\r\n                            if ((/\\s/).test(b[aa]) === true) {\r\n                                aa = parse.spacer({ array: b, end: c, index: aa }) + 1;\r\n                            }\r\n                            if (b[aa] === \"{\") {\r\n                                rec.token = b.slice(a, aa + 1).join(\"\");\r\n                                rec.types = \"template_else\";\r\n                                recordPush(data, rec, \"else\");\r\n                                a = aa;\r\n                                return;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            recordPush(data, rec, \"\");\r\n            parse.linesSpace = liner;\r\n        }, \r\n        // A fix for Vapor Leaf start structure parsing\r\n        vaporStart = function lexer_markup_vaporStart() {\r\n            const rec = parse.pop(data);\r\n            rec.token = `${rec.token} {`;\r\n            rec.types = \"template_start\";\r\n            recordPush(data, rec, rec.token.slice(0, rec.token.indexOf(\"(\")));\r\n        }, \r\n        //parses tags, attributes, and template elements\r\n        tag = function lexer_markup_tag(end) {\r\n            // markup is two smaller lexers that work together: tag - evaluates markup and\r\n            // template tags content - evaluates text content and code for external lexers\r\n            //\r\n            //type definitions:\r\n            // * start      end     type\r\n            // * <![CDATA[   ]]>    cdata\r\n            // * <!--       -->     comment\r\n            // * <#--       -->     comment\r\n            // * <%--       --%>    comment\r\n            // * {!         !}      comment\r\n            // * <!--[if    -->     conditional\r\n            // * text       text    content\r\n            // * </         >       end\r\n            // * <pre       </pre>  ignore (html only)\r\n            // * text       text    script\r\n            // * <!         >       sgml\r\n            // * <          />      singleton\r\n            // * <          >       start\r\n            // * text       text    style\r\n            // * <!--#      -->     template\r\n            // * <%         %>      template\r\n            // * {{{        }}}     template\r\n            // * {{         }}      template\r\n            // * {%         %}      template\r\n            // * [%         %]      template\r\n            // * {@         @}      template\r\n            // * {#         #}      template\r\n            // * {#         /}      template\r\n            // * {?         /}      template\r\n            // * {^         /}      template\r\n            // * {@         /}      template\r\n            // * {<         /}      template\r\n            // * {+         /}      template\r\n            // * {~         }       template\r\n            // * <?         ?>      template\r\n            // * {:else}            template_else\r\n            // * <#else     >       template_else\r\n            // * {@}else{@}         template_else\r\n            // * <%}else{%>         template_else\r\n            // * {{         }}      template_end\r\n            // * <%\\s*}     %>      template_end\r\n            // * [%\\s*}     %]      template_end\r\n            // * {@\\s*}     @}      template_end\r\n            // * {          }       template_end\r\n            // * {{#        }}      template_start\r\n            // * <%         {\\s*%>  template_start\r\n            // * [%         {\\s*%]  template_start\r\n            // * {@         {\\s*@}  template_start\r\n            // * {#         }       template_start\r\n            // * {?         }       template_start\r\n            // * {^         }       template_start\r\n            // * {@         }       template_start\r\n            // * {<         }       template_start\r\n            // * {+         }       template_start\r\n            // * <?xml      ?>      xml\r\n            let igcount = 0, element = \"\", lastchar = \"\", ltype = \"\", tname = \"\", start = \"\", cheat = false, earlyexit = false, ignoreme = false, jscom = false, nopush = false, nosort = false, preserve = false, simple = false, singleton = false, attstore = [], comm = [\"\", 0];\r\n            const record = {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"markup\",\r\n                lines: parse.linesSpace,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: \"\",\r\n                types: \"\"\r\n            }, \r\n            //cftags is a list of supported coldfusion tags\r\n            // * required - means must have a separate matching end tag\r\n            // * optional - means the tag could have a separate end tag, but is probably a\r\n            // singleton\r\n            // * prohibited - means there is no corresponding end tag\r\n            cftags = {\r\n                \"cfNTauthenticate\": \"optional\",\r\n                \"cfabort\": \"prohibited\",\r\n                \"cfajaximport\": \"optional\",\r\n                \"cfajaxproxy\": \"optional\",\r\n                \"cfapplet\": \"prohibited\",\r\n                \"cfapplication\": \"prohibited\",\r\n                \"cfargument\": \"prohibited\",\r\n                \"cfassociate\": \"prohibited\",\r\n                \"cfauthenticate\": \"prohibited\",\r\n                \"cfbreak\": \"prohibited\",\r\n                \"cfcache\": \"optional\",\r\n                \"cfcalendar\": \"optional\",\r\n                \"cfcase\": \"required\",\r\n                \"cfcatch\": \"required\",\r\n                \"cfchart\": \"optional\",\r\n                \"cfchartdata\": \"prohibited\",\r\n                \"cfchartseries\": \"optional\",\r\n                \"cfclient\": \"required\",\r\n                \"cfclientsettings\": \"optional\",\r\n                \"cfcol\": \"prohibited\",\r\n                \"cfcollection\": \"prohibited\",\r\n                \"cfcomponent\": \"required\",\r\n                \"cfcontent\": \"optional\",\r\n                \"cfcontinue\": \"prohibited\",\r\n                \"cfcookie\": \"prohibited\",\r\n                \"cfdbinfo\": \"prohibited\",\r\n                \"cfdefaultcase\": \"required\",\r\n                \"cfdirectory\": \"prohibited\",\r\n                \"cfdiv\": \"optional\",\r\n                \"cfdocument\": \"optional\",\r\n                \"cfdocumentitem\": \"optional\",\r\n                \"cfdocumentsection\": \"optional\",\r\n                \"cfdump\": \"optional\",\r\n                \"cfelse\": \"prohibited\",\r\n                \"cfelseif\": \"prohibited\",\r\n                \"cferror\": \"prohibited\",\r\n                \"cfexchangecalendar\": \"optional\",\r\n                \"cfexchangeconnection\": \"optional\",\r\n                \"cfexchangecontact\": \"optional\",\r\n                \"cfexchangeconversation\": \"optional\",\r\n                \"cfexchangefilter\": \"optional\",\r\n                \"cfexchangefolder\": \"optional\",\r\n                \"cfexchangemail\": \"optional\",\r\n                \"cfexchangetask\": \"optional\",\r\n                \"cfexecute\": \"required\",\r\n                \"cfexit\": \"prohibited\",\r\n                \"cffeed\": \"prohibited\",\r\n                \"cffile\": \"optional\",\r\n                \"cffileupload\": \"optional\",\r\n                \"cffinally\": \"required\",\r\n                \"cfflush\": \"prohibited\",\r\n                \"cfform\": \"required\",\r\n                \"cfformgroup\": \"required\",\r\n                \"cfformitem\": \"optional\",\r\n                \"cfforward\": \"prohibited\",\r\n                \"cfftp\": \"prohibited\",\r\n                \"cffunction\": \"required\",\r\n                \"cfgraph\": \"required\",\r\n                \"cfgraphdata\": \"prohibited\",\r\n                \"cfgrid\": \"required\",\r\n                \"cfgridcolumn\": \"optional\",\r\n                \"cfgridrow\": \"optional\",\r\n                \"cfgridupdate\": \"optional\",\r\n                \"cfheader\": \"prohibited\",\r\n                \"cfhtmlbody\": \"optional\",\r\n                \"cfhtmlhead\": \"optional\",\r\n                \"cfhtmltopdf\": \"optional\",\r\n                \"cfhtmltopdfitem\": \"optional\",\r\n                \"cfhttp\": \"optional\",\r\n                \"cfhttpparam\": \"prohibited\",\r\n                \"cfif\": \"required\",\r\n                \"cfimage\": \"prohibited\",\r\n                \"cfimap\": \"prohibited\",\r\n                \"cfimapfilter\": \"optional\",\r\n                \"cfimport\": \"prohibited\",\r\n                \"cfinclude\": \"prohibited\",\r\n                \"cfindex\": \"prohibited\",\r\n                \"cfinput\": \"prohibited\",\r\n                \"cfinsert\": \"prohibited\",\r\n                \"cfinterface\": \"required\",\r\n                \"cfinvoke\": \"optional\",\r\n                \"cfinvokeargument\": \"prohibited\",\r\n                \"cflayout\": \"optional\",\r\n                \"cflayoutarea\": \"optional\",\r\n                \"cfldap\": \"prohibited\",\r\n                \"cflocation\": \"prohibited\",\r\n                \"cflock\": \"required\",\r\n                \"cflog\": \"prohibited\",\r\n                \"cflogic\": \"required\",\r\n                \"cfloginuser\": \"prohibited\",\r\n                \"cflogout\": \"prohibited\",\r\n                \"cfloop\": \"required\",\r\n                \"cfmail\": \"required\",\r\n                \"cfmailparam\": \"prohibited\",\r\n                \"cfmailpart\": \"required\",\r\n                \"cfmap\": \"optional\",\r\n                \"cfmapitem\": \"optional\",\r\n                \"cfmediaplayer\": \"optional\",\r\n                \"cfmenu\": \"required\",\r\n                \"cfmenuitem\": \"optional\",\r\n                \"cfmessagebox\": \"optional\",\r\n                \"cfmodule\": \"optional\",\r\n                \"cfoauth\": \"optional\",\r\n                \"cfobject\": \"prohibited\",\r\n                \"cfobjectcache\": \"prohibited\",\r\n                \"cfoutput\": \"required\",\r\n                \"cfpageencoding\": \"optional\",\r\n                \"cfparam\": \"prohibited\",\r\n                \"cfpdf\": \"optional\",\r\n                \"cfpdfform\": \"optional\",\r\n                \"cfpdfformparam\": \"optional\",\r\n                \"cfpdfparam\": \"prohibited\",\r\n                \"cfpdfsubform\": \"required\",\r\n                \"cfpod\": \"optional\",\r\n                \"cfpop\": \"prohibited\",\r\n                \"cfpresentation\": \"required\",\r\n                \"cfpresentationslide\": \"optional\",\r\n                \"cfpresenter\": \"optional\",\r\n                \"cfprint\": \"optional\",\r\n                \"cfprocessingdirective\": \"optional\",\r\n                \"cfprocparam\": \"prohibited\",\r\n                \"cfprocresult\": \"prohibited\",\r\n                \"cfprogressbar\": \"optional\",\r\n                \"cfproperty\": \"prohibited\",\r\n                \"cfquery\": \"required\",\r\n                \"cfqueryparam\": \"prohibited\",\r\n                \"cfregistry\": \"prohibited\",\r\n                \"cfreport\": \"optional\",\r\n                \"cfreportparam\": \"optional\",\r\n                \"cfrethrow\": \"prohibited\",\r\n                \"cfretry\": \"prohibited\",\r\n                \"cfreturn\": \"prohibited\",\r\n                \"cfsavecontent\": \"required\",\r\n                \"cfschedule\": \"prohibited\",\r\n                \"cfscript\": \"required\",\r\n                \"cfsearch\": \"prohibited\",\r\n                \"cfselect\": \"required\",\r\n                \"cfservlet\": \"prohibited\",\r\n                \"cfservletparam\": \"prohibited\",\r\n                \"cfset\": \"prohibited\",\r\n                \"cfsetting\": \"optional\",\r\n                \"cfsharepoint\": \"optional\",\r\n                \"cfsilent\": \"required\",\r\n                \"cfsleep\": \"prohibited\",\r\n                \"cfslider\": \"prohibited\",\r\n                \"cfspreadsheet\": \"optional\",\r\n                \"cfsprydataset\": \"optional\",\r\n                \"cfstatic\": \"required\",\r\n                \"cfstopwatch\": \"required\",\r\n                \"cfstoredproc\": \"optional\",\r\n                \"cfswitch\": \"required\",\r\n                \"cftable\": \"required\",\r\n                \"cftextarea\": \"optional\",\r\n                \"cfthread\": \"optional\",\r\n                \"cfthrow\": \"prohibited\",\r\n                \"cftimer\": \"required\",\r\n                \"cftooltip\": \"required\",\r\n                \"cftrace\": \"optional\",\r\n                \"cftransaction\": \"required\",\r\n                \"cftree\": \"required\",\r\n                \"cftreeitem\": \"optional\",\r\n                \"cftry\": \"required\",\r\n                \"cfupdate\": \"prohibited\",\r\n                \"cfvideo\": \"prohibited\",\r\n                \"cfvideoplayer\": \"optional\",\r\n                \"cfwddx\": \"prohibited\",\r\n                \"cfwebsocket\": \"optional\",\r\n                \"cfwhile\": \"required\",\r\n                \"cfwindow\": \"optional\",\r\n                \"cfx_\": \"prohibited\",\r\n                \"cfxml\": \"required\",\r\n                \"cfzip\": \"optional\",\r\n                \"cfzipparam\": \"prohibited\"\r\n            }, \r\n            //attribute name\r\n            arname = function lexer_markup_tag_name(x) {\r\n                const eq = x.indexOf(\"=\");\r\n                if (eq > 0 && ((eq < x.indexOf(\"\\\"\") && x.indexOf(\"\\\"\") > 0) || (eq < x.indexOf(\"'\") && x.indexOf(\"'\") > 0))) {\r\n                    return [x.slice(0, eq), x.slice(eq + 1)];\r\n                }\r\n                return [x, \"\"];\r\n            }, \r\n            // attribute parser\r\n            attributeRecord = function lexer_markup_tag_attributeRecord() {\r\n                let ind = 0, eq = 0, dq = 0, sq = 0, slice = \"\", name = \"\", cft = cftags[tname\r\n                    .toLowerCase()\r\n                    .replace(/\\/$/, \"\")], store = [], len = attstore.length;\r\n                const qc = (options.lexer_options.markup.quote_convert === undefined)\r\n                    ? \"none\"\r\n                    : options.lexer_options.markup.quote_convert, begin = parse.count, stack = tname.replace(/\\/$/, \"\"), syntax = \"<{\\\"'=/\", convertQ = function lexer_markup_tag_attributeRecord_convertQ() {\r\n                    if (ignoreme === true || qc === \"none\" || record.types !== \"attribute\" || (qc === \"single\" && record.token.indexOf(\"\\\"\") < 0) || (qc === \"double\" && record.token.indexOf(\"'\") < 0)) {\r\n                        recordPush(data, record, \"\");\r\n                    }\r\n                    else {\r\n                        let ee = 0, inner = false;\r\n                        const chars = record.token.split(\"\"), eq = record.token.indexOf(\"=\"), len = chars.length - 1;\r\n                        if (chars[eq + 1] !== \"\\\"\" && qc === \"single\" && chars[chars.length - 1] !== \"\\\"\") {\r\n                            recordPush(data, record, \"\");\r\n                        }\r\n                        else if (chars[eq + 1] !== \"'\" && qc === \"double\" && chars[chars.length - 1] !== \"'\") {\r\n                            recordPush(data, record, \"\");\r\n                        }\r\n                        else {\r\n                            ee = eq + 2;\r\n                            if (qc === \"double\") {\r\n                                if (record.token.slice(eq + 2, len).indexOf(\"\\\"\") > -1) {\r\n                                    inner = true;\r\n                                }\r\n                                chars[eq + 1] = \"\\\"\";\r\n                                chars[chars.length - 1] = \"\\\"\";\r\n                            }\r\n                            else {\r\n                                if (record.token.slice(eq + 2, len).indexOf(\"'\") > -1) {\r\n                                    inner = true;\r\n                                }\r\n                                chars[eq + 1] = \"'\";\r\n                                chars[chars.length - 1] = \"'\";\r\n                            }\r\n                            if (inner === true) {\r\n                                do {\r\n                                    if (chars[ee] === \"'\" && qc === \"single\") {\r\n                                        chars[ee] = \"\\\"\";\r\n                                    }\r\n                                    else if (chars[ee] === \"\\\"\" && qc === \"double\") {\r\n                                        chars[ee] = \"'\";\r\n                                    }\r\n                                    ee = ee + 1;\r\n                                } while (ee < len);\r\n                            }\r\n                            record.token = chars.join(\"\");\r\n                            recordPush(data, record, \"\");\r\n                        }\r\n                    }\r\n                }, templateAtt = function lexer_markup_tag_attributeRecord_templateAtt(sample, token) {\r\n                    if (sample.charAt(0) === \"{\" && \"{%#@:/?^<+~=\".indexOf(sample.charAt(1)) > -1) {\r\n                        record.types = \"template_attribute\";\r\n                    }\r\n                    else if (sample.charAt(0) === \"<\") {\r\n                        record.types = \"template_attribute\";\r\n                    }\r\n                    else if (sample === \"[%\") {\r\n                        record.types = \"template_attribute\";\r\n                    }\r\n                    else {\r\n                        record.token = token;\r\n                        convertQ();\r\n                        return;\r\n                    }\r\n                    record.token = token;\r\n                    convertQ();\r\n                    record.types = \"attribute\";\r\n                };\r\n                if (attstore.length < 1) {\r\n                    return;\r\n                }\r\n                // fix for singleton tags, since \"/\" at the end of the tag is not an attribute\r\n                if (attstore[attstore.length - 1][0] === \"/\") {\r\n                    attstore.pop();\r\n                    element = element.replace(/>$/, \"/>\");\r\n                }\r\n                // reconnects attribute names to their respective values if separated on \"=\"\r\n                eq = attstore.length;\r\n                dq = 1;\r\n                if (dq < eq) {\r\n                    do {\r\n                        name = attstore[dq - 1][0];\r\n                        if (name.charAt(name.length - 1) === \"=\" && attstore[dq][0].indexOf(\"=\") < 0) {\r\n                            attstore[dq - 1][0] = name + attstore[dq][0];\r\n                            attstore.splice(dq, 1);\r\n                            eq = eq - 1;\r\n                            dq = dq - 1;\r\n                        }\r\n                        dq = dq + 1;\r\n                    } while (dq < eq);\r\n                }\r\n                // sort the attributes\r\n                if ((options.lexer_options.markup.attribute_sort === true || options.lexer_options.markup.tag_sort === true) && jscom === false && options.language !== \"jsx\" && nosort === false && tname !== \"cfif\" && tname !== \"cfelseif\" && tname !== \"cfset\") {\r\n                    // if making use of the 'attribute_sort_list` option\r\n                    if (asl > 0) {\r\n                        const tempstore = [];\r\n                        dq = 0;\r\n                        eq = 0;\r\n                        len = attstore.length;\r\n                        // loop through the attribute_sort_list looking for attribute name matches\r\n                        do {\r\n                            // loop through the attstore\r\n                            eq = 0;\r\n                            do {\r\n                                name = attstore[eq][0].split(\"=\")[0];\r\n                                if (attribute_sort_list[dq] === name) {\r\n                                    tempstore.push(attstore[eq]);\r\n                                    attstore.splice(eq, 1);\r\n                                    len = len - 1;\r\n                                    break;\r\n                                }\r\n                                eq = eq + 1;\r\n                            } while (eq < len);\r\n                            dq = dq + 1;\r\n                        } while (dq < asl);\r\n                        attstore = parse.safeSort(attstore, \"\", false);\r\n                        attstore = tempstore.concat(attstore);\r\n                        len = attstore.length;\r\n                    }\r\n                    else {\r\n                        attstore = parse.safeSort(attstore, \"\", false);\r\n                    }\r\n                }\r\n                // preparation for a coldfusion edge case\r\n                if (tname.slice(0, 3).toLowerCase() === \"cf_\") {\r\n                    cft = \"required\";\r\n                }\r\n                record.begin = begin;\r\n                record.stack = stack;\r\n                record.types = \"attribute\";\r\n                store = [];\r\n                if (ind < len) {\r\n                    do {\r\n                        if (attstore[ind] === undefined) {\r\n                            break;\r\n                        }\r\n                        attstore[ind][0] = attstore[ind][0].replace(/\\s+$/, \"\");\r\n                        record.lines = attstore[ind][1];\r\n                        eq = attstore[ind][0].indexOf(\"=\");\r\n                        dq = attstore[ind][0].indexOf(\"\\\"\");\r\n                        sq = attstore[ind][0].indexOf(\"'\");\r\n                        if ((/^\\/(\\/|\\*)/).test(attstore[ind][0]) === true && options.language === \"jsx\") {\r\n                            record.types = \"comment_attribute\";\r\n                            record.token = attstore[ind][0];\r\n                            convertQ();\r\n                        }\r\n                        else if (eq > -1 && store.length > 0) {\r\n                            // put certain attributes together for coldfusion\r\n                            record.token = store.join(\" \");\r\n                            convertQ();\r\n                            if (attstore[ind][0].indexOf(\"=\") > 0 && attstore[ind][0].indexOf(\"//\") < 0 && attstore[ind][0].charAt(0) !== \";\") {\r\n                                record.token = attstore[ind][0].replace(/\\s$/, \"\");\r\n                            }\r\n                            else {\r\n                                record.token = attstore[ind][0];\r\n                            }\r\n                            convertQ();\r\n                            store = [];\r\n                        }\r\n                        else if (ltype === \"sgml\") {\r\n                            store.push(attstore[ind][0]);\r\n                        }\r\n                        else if (cft !== undefined && eq < 0 && attstore[ind][0].indexOf(\"=\") < 0) {\r\n                            // put certain attributes together for coldfusion\r\n                            store.push(attstore[ind][0]);\r\n                        }\r\n                        else if ((cft !== undefined && eq < 0) || (dq > 0 && dq < eq) || (sq > 0 && sq < eq) || syntax.indexOf(attstore[ind][0].charAt(0)) > -1) {\r\n                            // tags stored as attributes of other tags\r\n                            templateAtt(attstore[ind][0].replace(/^(\"|')/, \"\").slice(0, 2), attstore[ind][0].replace(/\\s$/, \"\"));\r\n                        }\r\n                        else if (eq < 0 && cft === undefined) {\r\n                            // in most markup languages an attribute without an expressed value has its name\r\n                            // as its string value\r\n                            if (html === \"html\" && \"[{(\".indexOf(attstore[ind][0].charAt(0)) < 0 && attstore[ind][0].charAt(0) !== \"#\" && (/^\\*?ng[A-Z]/).test(attstore[ind][0]) === false) {\r\n                                record.token = attstore[ind][0].toLowerCase();\r\n                            }\r\n                            else if (options.language === \"xml\" || options.language === \"coldfusion\") {\r\n                                if (options.lexer_options.markup.quote_convert === \"single\") {\r\n                                    record.token = `${attstore[ind][0]}='${attstore[ind][0]}'`;\r\n                                }\r\n                                else {\r\n                                    record.token = `${attstore[ind][0]}=\"${attstore[ind][0]}\"`;\r\n                                }\r\n                            }\r\n                            else {\r\n                                record.token = attstore[ind][0];\r\n                            }\r\n                            convertQ();\r\n                        }\r\n                        else {\r\n                            // separates out the attribute name from its value\r\n                            slice = attstore[ind][0].slice(eq + 1);\r\n                            if (syntax.indexOf(slice.charAt(0)) < 0 && cft === undefined) {\r\n                                slice = \"\\\"\" + slice + \"\\\"\";\r\n                            }\r\n                            name = attstore[ind][0].slice(0, eq);\r\n                            if (html === \"html\" && \"[{(\".indexOf(name.charAt(0)) < 0 && cft === undefined && (/^\\*?ng[A-Z]/).test(attstore[ind][0]) === false) {\r\n                                name = name.toLowerCase();\r\n                            }\r\n                            if (options.language === \"jsx\" && (/^(\\s*\\{)/).test(slice) === true) {\r\n                                record.token = name + \"={\";\r\n                                record.types = \"jsx_attribute_start\";\r\n                                recordPush(data, record, \"jsx_attribute\");\r\n                                sparser.lexers.script(slice.slice(1, slice.length - 1));\r\n                                record.begin = parse.count;\r\n                                if ((/\\s\\}$/).test(slice) === true) {\r\n                                    slice = slice.slice(0, slice.length - 1);\r\n                                    slice = (/\\s+$/).exec(slice)[0];\r\n                                    if (slice.indexOf(\"\\n\") < 0) {\r\n                                        record.lines = 1;\r\n                                    }\r\n                                    else {\r\n                                        record.lines = slice.split(\"\\n\").length;\r\n                                    }\r\n                                }\r\n                                else {\r\n                                    record.lines = 0;\r\n                                }\r\n                                record.begin = parse.structure[parse.structure.length - 1][1];\r\n                                record.stack = parse.structure[parse.structure.length - 1][0];\r\n                                record.token = \"}\";\r\n                                record.types = \"jsx_attribute_end\";\r\n                                convertQ();\r\n                                record.types = \"attribute\";\r\n                                record.begin = begin;\r\n                                record.stack = stack;\r\n                            }\r\n                            else {\r\n                                name = name + \"=\" + slice;\r\n                                templateAtt(slice.replace(/^(\"|')/, \"\").slice(0, 2), name.replace(/(\\s+)$/, \"\"));\r\n                            }\r\n                        }\r\n                        ind = ind + 1;\r\n                    } while (ind < len);\r\n                }\r\n                if (store.length > 0) {\r\n                    record.token = store.join(\" \");\r\n                    convertQ();\r\n                }\r\n            };\r\n            ext = false;\r\n            // this complex series of conditions determines an elements delimiters look to\r\n            // the types being pushed to quickly reason about the logic no type is pushed\r\n            // for start tags or singleton tags just yet some types set the `preserve` flag,\r\n            // which means to preserve internal white space The `nopush` flag is set when\r\n            // parsed tags are to be ignored and forgotten\r\n            (function lexer_markup_tag_types() {\r\n                if (end === \"]>\") {\r\n                    end = \">\";\r\n                    sgmlflag = sgmlflag - 1;\r\n                    ltype = \"end\";\r\n                }\r\n                else if (end === \"---\") {\r\n                    ltype = \"comment\";\r\n                    start = \"---\";\r\n                }\r\n                else if (end === \")\" && options.language === \"vapor\") {\r\n                    ltype = \"template\";\r\n                }\r\n                else if (b[a] === \"<\") {\r\n                    if (b[a + 1] === \"/\") {\r\n                        if (b[a + 2] === \"#\") {\r\n                            ltype = \"template_end\";\r\n                        }\r\n                        else {\r\n                            ltype = \"end\";\r\n                        }\r\n                        end = \">\";\r\n                    }\r\n                    else if (b[a + 1] === \"!\") {\r\n                        if (b[a + 2] === \"-\" && b[a + 3] === \"-\") {\r\n                            if (b[a + 4] === \"#\") {\r\n                                end = \"-->\";\r\n                                ltype = \"template\";\r\n                            }\r\n                            else if (b[a + 4] === \"-\" && (/<cf[a-z]/i).test(source) === true) {\r\n                                end = \"--->\";\r\n                                ltype = \"comment\";\r\n                                start = \"<!---\";\r\n                            }\r\n                            else {\r\n                                end = \"-->\";\r\n                                ltype = \"comment\";\r\n                                start = \"<!--\";\r\n                            }\r\n                        }\r\n                        else if (b[a + 2] === \"[\" && b[a + 3] === \"C\" && b[a + 4] === \"D\" && b[a + 5] === \"A\" && b[a + 6] === \"T\" && b[a + 7] === \"A\" && b[a + 8] === \"[\") {\r\n                            end = \"]]>\";\r\n                            ltype = \"cdata\";\r\n                            preserve = true;\r\n                        }\r\n                        else {\r\n                            end = \">\";\r\n                            sgmlflag = sgmlflag + 1;\r\n                            ltype = \"sgml\";\r\n                        }\r\n                    }\r\n                    else if (b[a + 1] === \"?\") {\r\n                        end = \"?>\";\r\n                        if (b[a + 2] === \"x\" && b[a + 3] === \"m\" && b[a + 4] === \"l\") {\r\n                            ltype = \"xml\";\r\n                            simple = true;\r\n                        }\r\n                        else {\r\n                            preserve = true;\r\n                            ltype = \"template\";\r\n                        }\r\n                    }\r\n                    else if (b[a + 1] === \"%\") {\r\n                        preserve = true;\r\n                        if (b[a + 2] === \"-\" && b[a + 3] === \"-\") {\r\n                            end = \"--%>\";\r\n                            ltype = \"comment\";\r\n                            start = \"<%--\";\r\n                        }\r\n                        else if (b[a + 2] === \"#\") {\r\n                            end = \"%>\";\r\n                            ltype = \"comment\";\r\n                            start = \"<%#\";\r\n                        }\r\n                        else {\r\n                            end = \"%>\";\r\n                            ltype = \"template\";\r\n                        }\r\n                    }\r\n                    else if ((b[a + 1] === \"p\" || b[a + 1] === \"P\") && (b[a + 2] === \"r\" || b[a + 2] === \"R\") && (b[a + 3] === \"e\" || b[a + 3] === \"E\") && (b[a + 4] === \">\" || (/\\s/).test(b[a + 4]) === true)) {\r\n                        end = \"</pre>\";\r\n                        preserve = true;\r\n                        ltype = \"ignore\";\r\n                    }\r\n                    else if ((b[a + 1] === \"x\" || b[a + 1] === \"X\") && (b[a + 2] === \"m\" || b[a + 2] === \"M\") && (b[a + 3] === \"l\" || b[a + 3] === \"L\") && b[a + 4] === \":\" && (b[a + 5] === \"t\" || b[a + 5] === \"T\") && (b[a + 6] === \"e\" || b[a + 6] === \"E\") && (b[a + 7] === \"x\" || b[a + 7] === \"X\") && (b[a + 8] === \"t\" || b[a + 8] === \"T\") && (b[a + 9] === \">\" || (/\\s/).test(b[a + 9]) === true)) {\r\n                        end = \"</xsl:text>\";\r\n                        preserve = true;\r\n                        ltype = \"ignore\";\r\n                    }\r\n                    else if ((b[a + 1] === \"c\" || b[a + 1] === \"C\") && (b[a + 2] === \"f\" || b[a + 2] === \"F\") && (b[a + 3] === \"q\" || b[a + 3] === \"Q\") && (b[a + 4] === \"u\" || b[a + 4] === \"U\") && (b[a + 5] === \"e\" || b[a + 5] === \"E\") && (b[a + 6] === \"r\" || b[a + 6] === \"R\") && (b[a + 7] === \"y\" || b[a + 7] === \"Y\") && (b[a + 8] === \">\" || (/\\s/).test(b[a + 8]) === true)) {\r\n                        end = \"</\" + b.slice(a + 1, a + 8).join(\"\") + \">\";\r\n                        preserve = true;\r\n                        ltype = \"content_preserve\";\r\n                    }\r\n                    else if (b[a + 1] === \"<\") {\r\n                        if (b[a + 2] === \"<\") {\r\n                            end = \">>>\";\r\n                        }\r\n                        else {\r\n                            end = \">>\";\r\n                        }\r\n                        ltype = \"template\";\r\n                    }\r\n                    else if (b[a + 1] === \"#\") {\r\n                        if (b[a + 2] === \"e\" && b[a + 3] === \"l\" && b[a + 4] === \"s\" && b[a + 5] === \"e\") {\r\n                            end = \">\";\r\n                            ltype = \"template_else\";\r\n                        }\r\n                        else if (b[a + 2] === \"-\" && b[a + 3] === \"-\") {\r\n                            end = \"-->\";\r\n                            ltype = \"comment\";\r\n                            start = \"<#--\";\r\n                        }\r\n                        else {\r\n                            end = \">\";\r\n                            ltype = \"template_start\";\r\n                        }\r\n                    }\r\n                    else {\r\n                        simple = true;\r\n                        end = \">\";\r\n                    }\r\n                }\r\n                else if (b[a] === \"{\") {\r\n                    preserve = true;\r\n                    if (options.language === \"jsx\") {\r\n                        ext = true;\r\n                        earlyexit = true;\r\n                        record.token = \"{\";\r\n                        record.types = \"script_start\";\r\n                        recordPush(data, record, \"\");\r\n                        parse.structure.push([\"script\", parse.count]);\r\n                        return;\r\n                    }\r\n                    if (options.language === \"dustjs\") {\r\n                        if (b[a + 1] === \":\" && b[a + 2] === \"e\" && b[a + 3] === \"l\" && b[a + 4] === \"s\" && b[a + 5] === \"e\" && b[a + 6] === \"}\") {\r\n                            a = a + 6;\r\n                            earlyexit = true;\r\n                            record.token = \"{:else}\";\r\n                            record.types = \"template_else\";\r\n                            recordPush(data, record, \"else\");\r\n                            return;\r\n                        }\r\n                        if (b[a + 1] === \"!\") {\r\n                            end = \"!}\";\r\n                            ltype = \"comment\";\r\n                            start = \"{!\";\r\n                        }\r\n                        else if (b[a + 1] === \"/\") {\r\n                            end = \"}\";\r\n                            ltype = \"template_end\";\r\n                        }\r\n                        else if (b[a + 1] === \"~\") {\r\n                            end = \"}\";\r\n                            ltype = \"singleton\";\r\n                        }\r\n                        else if (b[a + 1] === \">\") {\r\n                            end = \"/}\";\r\n                            ltype = \"singleton\";\r\n                        }\r\n                        else if (b[a + 1] === \"#\" || b[a + 1] === \"?\" || b[a + 1] === \"^\" || b[a + 1] === \"@\" || b[a + 1] === \"<\" || b[a + 1] === \"+\") {\r\n                            end = \"}\";\r\n                            ltype = \"template_start\";\r\n                        }\r\n                        else {\r\n                            end = \"}\";\r\n                            ltype = \"template\";\r\n                        }\r\n                    }\r\n                    else if (b[a + 1] === \"{\") {\r\n                        if (b[a + 2] === \"{\") {\r\n                            end = \"}}}\";\r\n                            ltype = \"template\";\r\n                        }\r\n                        else if (b[a + 2] === \"#\") {\r\n                            end = \"}}\";\r\n                            ltype = \"template_start\";\r\n                        }\r\n                        else if (b[a + 2] === \"/\") {\r\n                            end = \"}}\";\r\n                            ltype = \"template_end\";\r\n                        }\r\n                        else if (b[a + 2] === \"e\" && b[a + 3] === \"n\" && b[a + 4] === \"d\") {\r\n                            end = \"}}\";\r\n                            ltype = \"template_end\";\r\n                        }\r\n                        else if (b[a + 2] === \"e\" && b[a + 3] === \"l\" && b[a + 4] === \"s\" && b[a + 5] === \"e\") {\r\n                            end = \"}}\";\r\n                            ltype = \"template_else\";\r\n                        }\r\n                        else {\r\n                            end = \"}}\";\r\n                            ltype = \"template\";\r\n                        }\r\n                    }\r\n                    else if (b[a + 1] === \"%\") {\r\n                        end = \"%}\";\r\n                        ltype = \"template\";\r\n                    }\r\n                    else if (b[a + 1] === \"#\") {\r\n                        end = \"#}\";\r\n                        ltype = \"comment\";\r\n                        start = \"{#\";\r\n                    }\r\n                    else {\r\n                        end = b[a + 1] + \"}\";\r\n                        ltype = \"template\";\r\n                    }\r\n                    if (b[a + 1] === \"@\" && b[a + 2] === \"}\" && b[a + 3] === \"e\" && b[a + 4] === \"l\" && b[a + 5] === \"s\" && b[a + 6] === \"e\" && b[a + 7] === \"{\" && b[a + 8] === \"@\" && b[a + 9] === \"}\") {\r\n                        a = a + 9;\r\n                        earlyexit = true;\r\n                        record.token = \"{@}else{@}\";\r\n                        record.types = \"template_else\";\r\n                        recordPush(data, record, \"else\");\r\n                        return;\r\n                    }\r\n                }\r\n                else if (b[a] === \"[\" && b[a + 1] === \"%\") {\r\n                    end = \"%]\";\r\n                    ltype = \"template\";\r\n                }\r\n                else if (b[a] === \"#\" && options.language === \"apacheVelocity\") {\r\n                    if (b[a + 1] === \"*\") {\r\n                        end = \"*#\";\r\n                        ltype = \"comment\";\r\n                        start = \"#*\";\r\n                    }\r\n                    else if (b[a + 1] === \"[\" && b[a + 2] === \"[\") {\r\n                        end = \"]]#\";\r\n                        ltype = \"comment\";\r\n                        start = \"#[[\";\r\n                    }\r\n                    else if (b[a + 1] === \"#\") {\r\n                        end = \"\\n\";\r\n                        ltype = \"comment\";\r\n                        start = \"##\";\r\n                    }\r\n                    else if (b[a + 1] === \"e\" && b[a + 2] === \"l\" && b[a + 3] === \"s\" && b[a + 4] === \"e\" && (/\\s/).test(b[a + 5]) === true) {\r\n                        end = \"\\n\";\r\n                        ltype = \"template_else\";\r\n                    }\r\n                    else if (b[a + 1] === \"i\" && b[a + 2] === \"f\") {\r\n                        end = \"\\n\";\r\n                        ltype = \"template_start\";\r\n                    }\r\n                    else if (b[a + 1] === \"f\" && b[a + 2] === \"o\" && b[a + 3] === \"r\" && b[a + 4] === \"e\" && b[a + 5] === \"a\" && b[a + 6] === \"c\" && b[a + 7] === \"h\") {\r\n                        end = \"\\n\";\r\n                        ltype = \"template_start\";\r\n                    }\r\n                    else if (b[a + 1] === \"e\" && b[a + 2] === \"n\" && b[a + 3] === \"d\") {\r\n                        end = \"\\n\";\r\n                        ltype = \"template_end\";\r\n                    }\r\n                    else {\r\n                        end = \"\\n\";\r\n                        ltype = \"template\";\r\n                    }\r\n                }\r\n                else if (b[a] === \"$\" && options.language === \"apacheVelocity\") {\r\n                    end = \"\\n\";\r\n                    ltype = \"template\";\r\n                }\r\n                if (options.lexer_options.markup.unformatted === true) {\r\n                    preserve = true;\r\n                }\r\n            }());\r\n            if (earlyexit === true) {\r\n                return;\r\n            }\r\n            // This is the real tag lexer. Everything that follows is attribute handling and\r\n            // edge cases\r\n            lastchar = end.charAt(end.length - 1);\r\n            if (ltype === \"comment\" && b[a] === \"<\") {\r\n                comm = parse.wrapCommentBlock({\r\n                    chars: b,\r\n                    end: c,\r\n                    lexer: \"markup\",\r\n                    opening: start,\r\n                    start: a,\r\n                    terminator: end\r\n                });\r\n                element = comm[0];\r\n                a = comm[1];\r\n                if (element.replace(start, \"\").replace(/(^\\s*)/, \"\").indexOf(\"parse-ignore-start\") === 0) {\r\n                    record.token = element;\r\n                    record.types = \"ignore\";\r\n                    recordPush(data, record, \"\");\r\n                    return;\r\n                }\r\n            }\r\n            else if (a < c) {\r\n                let bcount = 0, braccount = 0, jsxcount = 0, e = 0, f = 0, parncount = 0, lines = 1, quote = \"\", jsxquote = \"\", stest = false, quotetest = false, dustatt = [], attribute = [];\r\n                const lex = [], \r\n                //finds slash escape sequences\r\n                slashy = function lexer_markup_tag_slashy() {\r\n                    let x = a;\r\n                    do {\r\n                        x = x - 1;\r\n                    } while (b[x] === \"\\\\\");\r\n                    x = a - x;\r\n                    if (x % 2 === 1) {\r\n                        return false;\r\n                    }\r\n                    return true;\r\n                }, \r\n                // attribute lexer\r\n                attributeLexer = function lexer_markup_tag_attributeLexer(quotes) {\r\n                    let atty = \"\", name, aa = 0, bb = 0;\r\n                    if (quotes === true) {\r\n                        atty = attribute.join(\"\");\r\n                        name = arname(atty);\r\n                        if (name[0] === \"data-parse-ignore\" || name[0] === \"data-prettydiff-ignore\") {\r\n                            ignoreme = true;\r\n                        }\r\n                        quote = \"\";\r\n                    }\r\n                    else {\r\n                        atty = attribute\r\n                            .join(\"\");\r\n                        if (options.language !== \"jsx\" || (options.language === \"jsx\" && atty.charAt(atty.length - 1) !== \"}\")) {\r\n                            atty = atty.replace(/\\s+/g, \" \");\r\n                        }\r\n                        name = arname(atty);\r\n                        if (name[0] === \"data-parse-ignore\" || name[0] === \"data-prettydiff-ignore\") {\r\n                            ignoreme = true;\r\n                        }\r\n                        if (options.language === \"jsx\" && attribute[0] === \"{\" && attribute[attribute.length - 1] === \"}\") {\r\n                            jsxcount = 0;\r\n                        }\r\n                    }\r\n                    if (atty.slice(0, 3) === \"<%=\" || atty.slice(0, 2) === \"{%\") {\r\n                        nosort = true;\r\n                    }\r\n                    atty = atty\r\n                        .replace(/^\\u0020/, \"\")\r\n                        .replace(/\\u0020$/, \"\");\r\n                    attribute = atty\r\n                        .replace(/\\r\\n/g, \"\\n\")\r\n                        .split(\"\\n\");\r\n                    bb = attribute.length;\r\n                    if (aa < bb) {\r\n                        do {\r\n                            attribute[aa] = attribute[aa].replace(/(\\s+)$/, \"\");\r\n                            aa = aa + 1;\r\n                        } while (aa < bb);\r\n                    }\r\n                    if (options.crlf === true) {\r\n                        atty = attribute.join(\"\\r\\n\");\r\n                    }\r\n                    else {\r\n                        atty = attribute.join(\"\\n\");\r\n                    }\r\n                    atty = bracketSpace(atty);\r\n                    if (atty === \"=\") {\r\n                        attstore[attstore.length - 1][0] = `${attstore[attstore.length - 1][0]}=`;\r\n                    }\r\n                    else if (atty.charAt(0) === \"=\" && attstore.length > 0 && attstore[attstore.length - 1][0].indexOf(\"=\") < 0) {\r\n                        //if an attribute starts with a `=` then adjoin it to the last attribute\r\n                        attstore[attstore.length - 1][0] = attstore[attstore.length - 1][0] + atty;\r\n                    }\r\n                    else if (atty.charAt(0) !== \"=\" && attstore.length > 0 && attstore[attstore.length - 1][0].indexOf(\"=\") === attstore[attstore.length - 1][0].length - 1) {\r\n                        // if an attribute follows an attribute ending with `=` then adjoin it to the\r\n                        // last attribute\r\n                        attstore[attstore.length - 1][0] = attstore[attstore.length - 1][0] + atty;\r\n                    }\r\n                    else if (options.language === \"coldfusion\" && attstore.length > 0 && ((\"+-\\u002a/(^\").indexOf(atty) > -1 || (\"+-\\u002a/(^\").indexOf(attstore[attstore.length - 1][0].charAt(attstore[attstore.length - 1][0].length - 1)) > -1)) {\r\n                        attstore[attstore.length - 1][0] = `${attstore[attstore.length - 1][0]} ${atty}`;\r\n                    }\r\n                    else if (atty !== \"\" && atty !== \" \") {\r\n                        attstore.push([atty, lines]);\r\n                    }\r\n                    if (attstore.length > 0 && attstore[attstore.length - 1][0].indexOf(\"=\\u201c\") > 0) {\r\n                        sparser.parseerror = `Quote looking character (\\u201c, &#x201c) used instead of actual quotes on line number ${parse.lineNumber}`;\r\n                    }\r\n                    else if (attstore.length > 0 && attstore[attstore.length - 1][0].indexOf(\"=\\u201d\") > 0) {\r\n                        sparser.parseerror = `Quote looking character (\\u201d, &#x201d) used instead of actual quotes on line number ${parse.lineNumber}`;\r\n                    }\r\n                    attribute = [];\r\n                    lines = (b[a] === \"\\n\")\r\n                        ? 2\r\n                        : 1;\r\n                };\r\n                do {\r\n                    if (b[a] === \"\\n\") {\r\n                        lines = lines + 1;\r\n                        if (options.language === \"apacheVelocity\" && lex[0] === \"#\") {\r\n                            a = a - 1;\r\n                            break;\r\n                        }\r\n                        parse.lineNumber = parse.lineNumber + 1;\r\n                    }\r\n                    if (preserve === true || (((/\\s/).test(b[a]) === false && quote !== \"}\") || quote === \"}\")) {\r\n                        lex.push(b[a]);\r\n                        if (lex[0] === \"<\" && lex[1] === \">\" && end === \">\") {\r\n                            record.token = \"<>\";\r\n                            record.types = \"start\";\r\n                            recordPush(data, record, \"(empty)\");\r\n                            return;\r\n                        }\r\n                        if (lex[0] === \"<\" && lex[1] === \"/\" && lex[2] === \">\" && end === \">\") {\r\n                            record.token = \"</>\";\r\n                            record.types = \"end\";\r\n                            recordPush(data, record, \"\");\r\n                            return;\r\n                        }\r\n                    }\r\n                    if (ltype === \"cdata\" && b[a] === \">\" && b[a - 1] === \"]\" && b[a - 2] !== \"]\") {\r\n                        sparser.parseerror = `CDATA tag ${lex.join(\"\")} is not properly terminated with ]]>`;\r\n                        break;\r\n                    }\r\n                    if (ltype === \"comment\") {\r\n                        quote = \"\";\r\n                        //comments must ignore fancy encapsulations and attribute parsing\r\n                        if (b[a] === lastchar && lex.length > end.length + 1) {\r\n                            //if current character matches the last character of the tag ending sequence\r\n                            f = lex.length;\r\n                            e = end.length - 1;\r\n                            if (e > -1) {\r\n                                do {\r\n                                    f = f - 1;\r\n                                    if (lex[f] !== end.charAt(e)) {\r\n                                        break;\r\n                                    }\r\n                                    e = e - 1;\r\n                                } while (e > -1);\r\n                            }\r\n                            if (e < 0) {\r\n                                if (end === \"endcomment\") {\r\n                                    f = f - 1;\r\n                                    if ((/\\s/).test(lex[f]) === true) {\r\n                                        do {\r\n                                            f = f - 1;\r\n                                        } while (f > 0 && (/\\s/).test(lex[f]) === true);\r\n                                    }\r\n                                    if (lex[f - 2] === \"{\" && lex[f - 1] === \"%\" && lex[f] === \"-\") {\r\n                                        end = \"-%}\";\r\n                                        lastchar = \"}\";\r\n                                    }\r\n                                    else if (lex[f - 1] === \"{\" && lex[f] === \"%\") {\r\n                                        end = \"%}\";\r\n                                        lastchar = \"}\";\r\n                                    }\r\n                                }\r\n                                else {\r\n                                    break;\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                    else {\r\n                        if (quote === \"\") {\r\n                            if (lex[0] + lex[1] === \"<!\" && ltype !== \"cdata\") {\r\n                                if (b[a] === \"[\") {\r\n                                    if (b[a + 1] === \"<\") {\r\n                                        ltype = \"start\";\r\n                                        break;\r\n                                    }\r\n                                    if ((/\\s/).test(b[a + 1]) === true) {\r\n                                        do {\r\n                                            a = a + 1;\r\n                                            if (b[a] === \"\\n\") {\r\n                                                lines = lines + 1;\r\n                                            }\r\n                                        } while (a < c - 1 && (/\\s/).test(b[a + 1]) === true);\r\n                                    }\r\n                                    if (b[a + 1] === \"<\") {\r\n                                        ltype = \"start\";\r\n                                        break;\r\n                                    }\r\n                                }\r\n                                if (b[a] !== \">\" && b[a + 1] === \"<\") {\r\n                                    sparser.parseerror = `SGML tag ${lex.join(\"\")} is missing termination with '[' or '>'.`;\r\n                                    break;\r\n                                }\r\n                            }\r\n                            if (options.language === \"jsx\") {\r\n                                if (b[a] === \"{\") {\r\n                                    jsxcount = jsxcount + 1;\r\n                                }\r\n                                else if (b[a] === \"}\") {\r\n                                    jsxcount = jsxcount - 1;\r\n                                }\r\n                            }\r\n                            if (data.types[parse.count] === \"sgml\" && b[a] === \"[\" && lex.length > 4) {\r\n                                data.types[parse.count] = \"template_start\";\r\n                                count.start = count.start + 1;\r\n                                break;\r\n                            }\r\n                            if (b[a] === \"<\" && options.language !== \"coldfusion\" && preserve === false && lex.length > 1 && end !== \">>\" && end !== \">>>\" && simple === true) {\r\n                                sparser.parseerror = `Parse error on line ${parse.lineNumber} on element: ${lex.join(\"\")}`;\r\n                            }\r\n                            if (stest === true && (/\\s/).test(b[a]) === false && b[a] !== lastchar) {\r\n                                //attribute start\r\n                                stest = false;\r\n                                quote = jsxquote;\r\n                                igcount = 0;\r\n                                lex.pop();\r\n                                if (a < c) {\r\n                                    do {\r\n                                        if (b[a] === \"\\n\") {\r\n                                            parse.lineNumber = parse.lineNumber + 1;\r\n                                        }\r\n                                        if (options.lexer_options.markup.unformatted === true) {\r\n                                            lex.push(b[a]);\r\n                                        }\r\n                                        else {\r\n                                            attribute.push(b[a]);\r\n                                        }\r\n                                        if ((b[a] === \"<\" || b[a] === \">\") && (quote === \"\" || quote === \">\") && options.language !== \"jsx\") {\r\n                                            if (quote === \"\" && b[a] === \"<\") {\r\n                                                quote = \">\";\r\n                                                braccount = 1;\r\n                                            }\r\n                                            else if (quote === \">\") {\r\n                                                if (b[a] === \"<\") {\r\n                                                    braccount = braccount + 1;\r\n                                                }\r\n                                                else if (b[a] === \">\") {\r\n                                                    braccount = braccount - 1;\r\n                                                    if (braccount === 0) {\r\n                                                        // the following detects if a coldfusion tag is embedded within another markup\r\n                                                        // tag\r\n                                                        tname = tagName(attribute.join(\"\"));\r\n                                                        if (cftags[tname] === \"required\") {\r\n                                                            quote = \"</\" + tname + \">\";\r\n                                                        }\r\n                                                        else {\r\n                                                            quote = \"\";\r\n                                                            igcount = 0;\r\n                                                            attributeLexer(false);\r\n                                                            break;\r\n                                                        }\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                        }\r\n                                        else if (quote === \"\") {\r\n                                            if (b[a + 1] === lastchar) {\r\n                                                //if at end of tag\r\n                                                if (attribute[attribute.length - 1] === \"/\" || (attribute[attribute.length - 1] === \"?\" && ltype === \"xml\")) {\r\n                                                    attribute.pop();\r\n                                                    if (preserve === true) {\r\n                                                        lex.pop();\r\n                                                    }\r\n                                                    a = a - 1;\r\n                                                }\r\n                                                if (attribute.length > 0) {\r\n                                                    attributeLexer(false);\r\n                                                }\r\n                                                break;\r\n                                            }\r\n                                            if ((/^=?(\"|')?((\\{(\\{|%|#|@|:|\\/|\\?|\\^|<|\\+|~|=))|(\\[%)|<)/).test(b[a] + b[a + 1] + b[a + 2] + b[a + 3]) === true) {\r\n                                                attribute.pop();\r\n                                                if (b[a] !== \"=\" && attribute.length > 0) {\r\n                                                    attributeLexer(false);\r\n                                                }\r\n                                                quote = \"\";\r\n                                                do {\r\n                                                    attribute.push(b[a]);\r\n                                                    if (b[a] === dustatt[dustatt.length - 1]) {\r\n                                                        dustatt.pop();\r\n                                                        if (b[a] === \"}\" && b[a + 1] === \"}\") {\r\n                                                            attribute.push(\"}\");\r\n                                                            a = a + 1;\r\n                                                            if (b[a + 1] === \"}\") {\r\n                                                                attribute.push(\"}\");\r\n                                                                a = a + 1;\r\n                                                            }\r\n                                                        }\r\n                                                        if (dustatt.length < 1) {\r\n                                                            attributeLexer(false);\r\n                                                            b[a] = \" \";\r\n                                                            break;\r\n                                                        }\r\n                                                    }\r\n                                                    else if ((b[a] === \"\\\"\" || b[a] === \"'\") && dustatt[dustatt.length - 1] !== \"\\\"\" && dustatt[dustatt.length - 1] !== \"'\") {\r\n                                                        dustatt.push(b[a]);\r\n                                                    }\r\n                                                    else if (b[a] === \"{\" && \"{%#@:/?^<+~=\".indexOf(b[a + 1]) && dustatt[dustatt.length - 1] !== \"}\") {\r\n                                                        dustatt.push(\"}\");\r\n                                                    }\r\n                                                    else if (b[a] === \"<\" && dustatt[dustatt.length - 1] !== \">\") {\r\n                                                        dustatt.push(\">\");\r\n                                                    }\r\n                                                    else if (b[a] === \"[\" && b[a + 1] === \":\" && dustatt[dustatt.length - 1] !== \"]\") {\r\n                                                        dustatt.push(\"]\");\r\n                                                    }\r\n                                                    a = a + 1;\r\n                                                } while (a < c);\r\n                                            }\r\n                                            else if (b[a] === \"{\" && b[a - 1] === \"=\" && options.language !== \"jsx\") {\r\n                                                quote = \"}\";\r\n                                            }\r\n                                            else if (b[a] === \"\\\"\" || b[a] === \"'\") {\r\n                                                quote = b[a];\r\n                                                if (b[a - 1] === \"=\" &&\r\n                                                    (b[a + 1] === \"<\" ||\r\n                                                        (b[a + 1] === \"{\" && b[a + 2] === \"%\") ||\r\n                                                        ((/\\s/).test(b[a + 1]) === true && b[a - 1] !== \"=\"))) {\r\n                                                    igcount = a;\r\n                                                }\r\n                                            }\r\n                                            else if (b[a] === \"(\") {\r\n                                                quote = \")\";\r\n                                                parncount = 1;\r\n                                            }\r\n                                            else if (options.language === \"jsx\") {\r\n                                                //jsx variable attribute\r\n                                                if ((b[a - 1] === \"=\" || (/\\s/).test(b[a - 1]) === true) && b[a] === \"{\") {\r\n                                                    quote = \"}\";\r\n                                                    bcount = 1;\r\n                                                }\r\n                                                else if (b[a] === \"/\") {\r\n                                                    //jsx comments\r\n                                                    if (b[a + 1] === \"*\") {\r\n                                                        quote = \"\\u002a/\";\r\n                                                    }\r\n                                                    else if (b[a + 1] === \"/\") {\r\n                                                        quote = \"\\n\";\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                            else if (lex[0] !== \"{\" && b[a] === \"{\" && (b[a + 1] === \"{\" || b[a + 1] === \"%\" || b[a + 1] === \"@\" || b[a + 1] === \"#\")) {\r\n                                                //opening embedded template expression\r\n                                                if (b[a + 1] === \"{\") {\r\n                                                    if (b[a + 2] === \"{\") {\r\n                                                        quote = \"}}}\";\r\n                                                    }\r\n                                                    else {\r\n                                                        quote = \"}}\";\r\n                                                    }\r\n                                                }\r\n                                                else {\r\n                                                    quote = b[a + 1] + \"}\";\r\n                                                }\r\n                                            }\r\n                                            if ((/\\s/).test(b[a]) === true && quote === \"\") {\r\n                                                // testing for a run of spaces between an attribute's = and a quoted value.\r\n                                                // Unquoted values separated by space are separate attributes\r\n                                                if (attribute[attribute.length - 2] === \"=\") {\r\n                                                    e = a + 1;\r\n                                                    if (e < c) {\r\n                                                        do {\r\n                                                            if ((/\\s/).test(b[e]) === false) {\r\n                                                                if (b[e] === \"\\\"\" || b[e] === \"'\") {\r\n                                                                    a = e - 1;\r\n                                                                    quotetest = true;\r\n                                                                    attribute.pop();\r\n                                                                }\r\n                                                                break;\r\n                                                            }\r\n                                                            e = e + 1;\r\n                                                        } while (e < c);\r\n                                                    }\r\n                                                }\r\n                                                if (quotetest === true) {\r\n                                                    quotetest = false;\r\n                                                }\r\n                                                else if (jsxcount === 0 || (jsxcount === 1 && attribute[0] === \"{\")) {\r\n                                                    //if there is an unquoted space attribute is complete\r\n                                                    attribute.pop();\r\n                                                    attributeLexer(false);\r\n                                                    stest = true;\r\n                                                    break;\r\n                                                }\r\n                                            }\r\n                                        }\r\n                                        else if (b[a] === \"(\" && quote === \")\") {\r\n                                            parncount = parncount + 1;\r\n                                        }\r\n                                        else if (b[a] === \")\" && quote === \")\") {\r\n                                            parncount = parncount - 1;\r\n                                            if (parncount === 0) {\r\n                                                quote = \"\";\r\n                                                if (b[a + 1] === end.charAt(0)) {\r\n                                                    attributeLexer(false);\r\n                                                    break;\r\n                                                }\r\n                                            }\r\n                                        }\r\n                                        else if (options.language === \"jsx\" && (quote === \"}\" || (quote === \"\\n\" && b[a] === \"\\n\") || (quote === \"\\u002a/\" && b[a - 1] === \"*\" && b[a] === \"/\"))) {\r\n                                            //jsx attributes\r\n                                            if (quote === \"}\") {\r\n                                                if (b[a] === \"{\") {\r\n                                                    bcount = bcount + 1;\r\n                                                }\r\n                                                else if (b[a] === quote) {\r\n                                                    bcount = bcount - 1;\r\n                                                    if (bcount === 0) {\r\n                                                        jsxcount = 0;\r\n                                                        quote = \"\";\r\n                                                        element = attribute.join(\"\");\r\n                                                        if (options.lexer_options.markup.unformatted === false) {\r\n                                                            if (options.language === \"jsx\") {\r\n                                                                if ((/^(\\s*)$/).test(element) === false) {\r\n                                                                    attstore.push([element, lines]);\r\n                                                                }\r\n                                                            }\r\n                                                            else {\r\n                                                                element = element.replace(/\\s+/g, \" \");\r\n                                                                if (element !== \" \") {\r\n                                                                    attstore.push([element, lines]);\r\n                                                                }\r\n                                                            }\r\n                                                        }\r\n                                                        attribute = [];\r\n                                                        lines = 1;\r\n                                                        break;\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                            else {\r\n                                                jsxquote = \"\";\r\n                                                jscom = true;\r\n                                                element = attribute.join(\"\");\r\n                                                if (element !== \" \") {\r\n                                                    attstore.push([element, lines]);\r\n                                                }\r\n                                                attribute = [];\r\n                                                lines = (quote === \"\\n\")\r\n                                                    ? 2\r\n                                                    : 1;\r\n                                                quote = \"\";\r\n                                                break;\r\n                                            }\r\n                                        }\r\n                                        else if (b[a] === \"{\" && b[a + 1] === \"%\" && b[igcount - 1] === \"=\" && (quote === \"\\\"\" || quote === \"'\")) {\r\n                                            quote = quote + \"{%\";\r\n                                            igcount = 0;\r\n                                        }\r\n                                        else if (b[a - 1] === \"%\" && b[a] === \"}\" && (quote === \"\\\"{%\" || quote === \"'{%\")) {\r\n                                            quote = quote.charAt(0);\r\n                                            igcount = 0;\r\n                                        }\r\n                                        else if (b[a] === \"<\" && end === \">\" && b[igcount - 1] === \"=\" && (quote === \"\\\"\" || quote === \"'\")) {\r\n                                            quote = quote + \"<\";\r\n                                            igcount = 0;\r\n                                        }\r\n                                        else if (b[a] === \">\" && (quote === \"\\\"<\" || quote === \"'<\")) {\r\n                                            quote = quote.charAt(0);\r\n                                            igcount = 0;\r\n                                        }\r\n                                        else if (igcount === 0 && quote !== \">\" && (quote.length < 2 || (quote.charAt(0) !== \"\\\"\" && quote.charAt(0) !== \"'\"))) {\r\n                                            //terminate attribute at the conclusion of a quote pair\r\n                                            f = 0;\r\n                                            if (lex.length > 1) {\r\n                                                tname = lex[1] + lex[2];\r\n                                                tname = tname.toLowerCase();\r\n                                            }\r\n                                            // in coldfusion quotes are escaped in a string with double the characters:\r\n                                            // \"cat\"\" and dog\"\r\n                                            if (tname === \"cf\" && b[a] === b[a + 1] && (b[a] === \"\\\"\" || b[a] === \"'\")) {\r\n                                                attribute.push(b[a + 1]);\r\n                                                a = a + 1;\r\n                                            }\r\n                                            else {\r\n                                                e = quote.length - 1;\r\n                                                if (e > -1) {\r\n                                                    do {\r\n                                                        if (b[a - f] !== quote.charAt(e)) {\r\n                                                            break;\r\n                                                        }\r\n                                                        f = f + 1;\r\n                                                        e = e - 1;\r\n                                                    } while (e > -1);\r\n                                                }\r\n                                                if (e < 0) {\r\n                                                    attributeLexer(true);\r\n                                                    if (b[a + 1] === lastchar) {\r\n                                                        break;\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                        }\r\n                                        else if (igcount > 0 && (/\\s/).test(b[a]) === false) {\r\n                                            igcount = 0;\r\n                                        }\r\n                                        a = a + 1;\r\n                                    } while (a < c);\r\n                                }\r\n                            }\r\n                            else if (end !== \"%>\" && end !== \"\\n\" && (b[a] === \"\\\"\" || b[a] === \"'\")) {\r\n                                //opening quote\r\n                                quote = b[a];\r\n                            }\r\n                            else if (ltype !== \"comment\" && end !== \"\\n\" && b[a] === \"<\" && b[a + 1] === \"!\" && b[a + 2] === \"-\" && b[a + 3] === \"-\" && b[a + 4] !== \"#\" && data.types[parse.count] !== \"conditional\") {\r\n                                quote = \"-->\";\r\n                            }\r\n                            else if (b[a] === \"{\" && lex[0] !== \"{\" && end !== \"\\n\" && end !== \"%>\" && end !== \"%]\" && (options.language === \"dustjs\" || b[a + 1] === \"{\" || b[a + 1] === \"%\" || b[a + 1] === \"@\" || b[a + 1] === \"#\")) {\r\n                                //opening embedded template expression\r\n                                if (b[a + 1] === \"{\") {\r\n                                    if (b[a + 2] === \"{\") {\r\n                                        quote = \"}}}\";\r\n                                    }\r\n                                    else {\r\n                                        quote = \"}}\";\r\n                                    }\r\n                                }\r\n                                else if (options.language === \"dustjs\") {\r\n                                    if (attribute.length < 1 && (attstore.length < 1 || (/\\s/).test(b[a - 1]) === true)) {\r\n                                        lex.pop();\r\n                                        do {\r\n                                            if (b[a] === \"\\n\") {\r\n                                                lines = lines + 1;\r\n                                            }\r\n                                            attribute.push(b[a]);\r\n                                            a = a + 1;\r\n                                        } while (a < c && b[a] !== \"}\");\r\n                                        attribute.push(\"}\");\r\n                                        attstore.push([attribute.join(\"\"), lines]);\r\n                                        attribute = [];\r\n                                        lines = 1;\r\n                                    }\r\n                                    else {\r\n                                        quote = \"}\";\r\n                                    }\r\n                                }\r\n                                else {\r\n                                    quote = b[a + 1] + \"}\";\r\n                                    if (attribute.length < 1 && (attstore.length < 1 || (/\\s/).test(b[a - 1]) === true)) {\r\n                                        lex.pop();\r\n                                        do {\r\n                                            if (b[a] === \"\\n\") {\r\n                                                lines = lines + 1;\r\n                                            }\r\n                                            attribute.push(b[a]);\r\n                                            a = a + 1;\r\n                                        } while (a < c && b[a - 1] + b[a] !== quote);\r\n                                        attribute.push(\"}\");\r\n                                        attstore.push([attribute.join(\"\"), lines]);\r\n                                        attribute = [];\r\n                                        lines = 1;\r\n                                        quote = \"\";\r\n                                    }\r\n                                }\r\n                                if (quote === end) {\r\n                                    quote = \"\";\r\n                                }\r\n                            }\r\n                            else if ((simple === true || ltype === \"sgml\") && end !== \"\\n\" && (/\\s/).test(b[a]) === true && b[a - 1] !== \"<\") {\r\n                                //identify a space in a regular start or singleton tag\r\n                                if (ltype === \"sgml\") {\r\n                                    lex.push(\" \");\r\n                                }\r\n                                else {\r\n                                    stest = true;\r\n                                }\r\n                            }\r\n                            else if (simple === true && options.language === \"jsx\" && b[a] === \"/\" && (b[a + 1] === \"*\" || b[a + 1] === \"/\")) {\r\n                                //jsx comment immediately following tag name\r\n                                stest = true;\r\n                                lex[lex.length - 1] = \" \";\r\n                                attribute.push(b[a]);\r\n                                if (b[a + 1] === \"*\") {\r\n                                    jsxquote = \"\\u002a/\";\r\n                                }\r\n                                else {\r\n                                    jsxquote = \"\\n\";\r\n                                }\r\n                            }\r\n                            else if ((b[a] === lastchar || (end === \"\\n\" && b[a + 1] === \"<\")) && (lex.length > end.length + 1 || lex[0] === \"]\") && (options.language !== \"jsx\" || jsxcount === 0)) {\r\n                                if (end === \"\\n\") {\r\n                                    if ((/\\s/).test(lex[lex.length - 1]) === true) {\r\n                                        do {\r\n                                            lex.pop();\r\n                                            a = a - 1;\r\n                                        } while ((/\\s/).test(lex[lex.length - 1]) === true);\r\n                                    }\r\n                                    break;\r\n                                }\r\n                                if (lex[0] === \"{\" && lex[1] === \"%\" && lex.join(\"\").replace(/\\s+/g, \"\") === \"{%comment%}\") {\r\n                                    end = \"endcomment\";\r\n                                    lastchar = \"t\";\r\n                                    preserve = true;\r\n                                    ltype = \"comment\";\r\n                                }\r\n                                else if (lex[0] === \"{\" && lex[1] === \"%\" && lex[2] === \"-\" && lex.join(\"\").replace(/\\s+/g, \"\") === \"{%-comment-%}\") {\r\n                                    end = \"endcomment\";\r\n                                    lastchar = \"t\";\r\n                                    preserve = true;\r\n                                    ltype = \"comment\";\r\n                                }\r\n                                else {\r\n                                    //if current character matches the last character of the tag ending sequence\r\n                                    f = lex.length;\r\n                                    e = end.length - 1;\r\n                                    if (e > -1) {\r\n                                        do {\r\n                                            f = f - 1;\r\n                                            if (lex[f] !== end.charAt(e)) {\r\n                                                break;\r\n                                            }\r\n                                            e = e - 1;\r\n                                        } while (e > -1);\r\n                                    }\r\n                                    if (e < 0) {\r\n                                        break;\r\n                                    }\r\n                                }\r\n                            }\r\n                        }\r\n                        else if (b[a] === quote.charAt(quote.length - 1) && ((options.language === \"jsx\" && end === \"}\" && (b[a - 1] !== \"\\\\\" || slashy() === false)) || options.language !== \"jsx\" || end !== \"}\")) {\r\n                            //find the closing quote or embedded template expression\r\n                            f = 0;\r\n                            if (lex.length > 1) {\r\n                                tname = lex[1] + lex[2];\r\n                                tname = tname.toLowerCase();\r\n                            }\r\n                            // in coldfusion quotes are escaped in a string with double the characters:\r\n                            // \"cat\"\" and dog\"\r\n                            if (tname === \"cf\" && b[a] === b[a + 1] && (b[a] === \"\\\"\" || b[a] === \"'\")) {\r\n                                attribute.push(b[a + 1]);\r\n                                a = a + 1;\r\n                            }\r\n                            else {\r\n                                e = quote.length - 1;\r\n                                if (e > -1) {\r\n                                    do {\r\n                                        if (b[a - f] !== quote.charAt(e)) {\r\n                                            break;\r\n                                        }\r\n                                        f = f + 1;\r\n                                        e = e - 1;\r\n                                    } while (e > -1);\r\n                                }\r\n                                if (e < 0) {\r\n                                    quote = \"\";\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                    a = a + 1;\r\n                } while (a < c);\r\n                //nopush flags mean an early exit\r\n                if (nopush) {\r\n                    return;\r\n                }\r\n                //a correction to incomplete template tags that use multiple angle braces\r\n                if (options.correct === true) {\r\n                    if (b[a + 1] === \">\" && lex[0] === \"<\" && lex[1] !== \"<\") {\r\n                        do {\r\n                            a = a + 1;\r\n                        } while (b[a + 1] === \">\");\r\n                    }\r\n                    else if (lex[0] === \"<\" && lex[1] === \"<\" && b[a + 1] !== \">\" && lex[lex.length - 2] !== \">\") {\r\n                        do {\r\n                            lex.splice(1, 1);\r\n                        } while (lex[1] === \"<\");\r\n                    }\r\n                }\r\n                igcount = 0;\r\n                element = lex.join(\"\");\r\n                tname = tagName(element);\r\n                element = bracketSpace(element);\r\n                if (tname === \"xml\") {\r\n                    html = \"xml\";\r\n                }\r\n                else if (html === \"\" && tname === \"!DOCTYPE\" && element.toLowerCase().indexOf(\"xhtml\") > 0) {\r\n                    html = \"xml\";\r\n                }\r\n                else if (html === \"\" && tname === \"html\") {\r\n                    html = \"html\";\r\n                }\r\n                if (element.replace(start, \"\").replace(/^\\s+/, \"\").indexOf(\"parse-ignore-start\") === 0) {\r\n                    a = a + 1;\r\n                    do {\r\n                        lex.push(b[a]);\r\n                        if (b[a] === \"d\" && lex.slice(lex.length - 16).join(\"\") === \"parse-ignore-end\") {\r\n                            break;\r\n                        }\r\n                        a = a + 1;\r\n                    } while (a < c);\r\n                    do {\r\n                        lex.push(b[a]);\r\n                        if (b[a] === end.charAt(end.length - 1) && b.slice(a - (end.length - 1), a + 1).join(\"\") === end) {\r\n                            break;\r\n                        }\r\n                        a = a + 1;\r\n                    } while (a < c);\r\n                    record.token = lex.join(\"\");\r\n                    record.types = \"ignore\";\r\n                    recordPush(data, record, \"\");\r\n                    return;\r\n                }\r\n            }\r\n            record.token = element;\r\n            record.types = ltype;\r\n            tname = tagName(element);\r\n            // Twig language allows {% block %} elements to be singleton or start.  You don't\r\n            // know until you encounter a {% endblock %} tag\r\n            if (tname === \"endblock\" && element.slice(0, 2) === \"{%\") {\r\n                const endName = element.replace(/\\{%\\s*endblock\\s+/, \"\").replace(/\\s*%\\}/, \"\");\r\n                let aa = parse.count, bb = parse.count, startName = \"\";\r\n                do {\r\n                    if (data.types[aa].indexOf(\"end\") > 0) {\r\n                        aa = data.begin[aa];\r\n                        if (aa < 0) {\r\n                            break;\r\n                        }\r\n                    }\r\n                    else if ((/\\{%\\s*block/).test(data.token[aa]) === true) {\r\n                        if (endName === \"\") {\r\n                            break;\r\n                        }\r\n                        startName = data.token[aa].replace(/\\{%\\s*block\\s+/, \"\").split(/\\s+/)[0].replace(/\\s+/, \"\");\r\n                        if (endName === startName) {\r\n                            break;\r\n                        }\r\n                    }\r\n                    aa = aa - 1;\r\n                } while (aa > -1);\r\n                count.start = count.start + 1;\r\n                data.types[aa] = \"template_start\";\r\n                data.ender[aa] = parse.count + 1;\r\n                record.begin = aa;\r\n                record.stack = \"block\";\r\n                record.token = element;\r\n                record.types = \"template_end\";\r\n                if (aa > -1) {\r\n                    do {\r\n                        if (data.types[bb].indexOf(\"end\") > 0) {\r\n                            bb = data.begin[bb];\r\n                            data.begin[bb] = aa;\r\n                            data.stack[bb] = \"block\";\r\n                        }\r\n                        else if (data.begin[bb] < aa) {\r\n                            data.begin[bb] = aa;\r\n                            if (data.types[bb].indexOf(\"start\") < 0) {\r\n                                data.ender[bb] = parse.count + 1;\r\n                            }\r\n                            data.stack[bb] = \"block\";\r\n                        }\r\n                        bb = bb - 1;\r\n                    } while (bb > aa);\r\n                }\r\n                parse.structure.push([\"block\", aa]);\r\n                recordPush(data, record, \"\");\r\n                return;\r\n            }\r\n            if ((/^(\\/?cf)/i).test(tname) === true) {\r\n                tname = tname\r\n                    .toLowerCase()\r\n                    .replace(/\\/$/, \"\")\r\n                    .replace(/^\\//, \"\");\r\n            }\r\n            if (preserve === false && options.language !== \"jsx\") {\r\n                element = element.replace(/\\s+/g, \" \");\r\n            }\r\n            //a quick hack to inject records for a type of template comments\r\n            if (tname === \"comment\" && element.slice(0, 2) === \"{%\") {\r\n                const lineFindStart = function lexer_markup_tag_lineFindStart(spaces) {\r\n                    if (spaces === \"\") {\r\n                        linesStart = 0;\r\n                    }\r\n                    else {\r\n                        linesStart = spaces.split(\"\\n\").length;\r\n                    }\r\n                    return \"\";\r\n                }, lineFindEnd = function lexer_markup_tag_lineFindEnd(spaces) {\r\n                    if (spaces === \"\") {\r\n                        linesEnd = 0;\r\n                    }\r\n                    else {\r\n                        linesEnd = spaces.split(\"\\n\").length;\r\n                    }\r\n                    return \"\";\r\n                };\r\n                let linesStart = 0, linesEnd = 0;\r\n                record.begin = parse.structure[parse.structure.length - 1][1];\r\n                record.ender = parse.count + 3;\r\n                record.stack = parse.structure[parse.structure.length - 1][0];\r\n                record.types = \"template_start\";\r\n                if (element.charAt(2) === \"-\") {\r\n                    element = element\r\n                        .replace(/^(\\s*\\{%-\\s*comment\\s*-%\\})/, \"\")\r\n                        .replace(/(\\{%-\\s*endcomment\\s*-%\\}\\s*)$/, \"\");\r\n                    record.token = \"{%- comment -%}\";\r\n                    recordPush(data, record, \"comment\");\r\n                    record.begin = parse.count;\r\n                    element = element.replace(/^\\s*/, lineFindStart);\r\n                    element = element.replace(/\\s*$/, lineFindEnd);\r\n                    record.lines = linesStart;\r\n                    record.stack = \"comment\";\r\n                    record.token = element;\r\n                    record.types = \"comment\";\r\n                    recordPush(data, record, \"\");\r\n                    record.token = \"{%- endcomment -%}\";\r\n                }\r\n                else {\r\n                    element = element\r\n                        .replace(/^(\\s*\\{%\\s*comment\\s*%\\})/, \"\")\r\n                        .replace(/(\\{%\\s*endcomment\\s*%\\}\\s*)$/, \"\");\r\n                    record.token = \"{% comment %}\";\r\n                    recordPush(data, record, \"comment\");\r\n                    record.begin = parse.count;\r\n                    element = element.replace(/^\\s*/, lineFindStart);\r\n                    element = element.replace(/\\s*$/, lineFindEnd);\r\n                    record.lines = linesStart;\r\n                    record.stack = \"comment\";\r\n                    record.token = element;\r\n                    record.types = \"comment\";\r\n                    recordPush(data, record, \"\");\r\n                    record.token = \"{% endcomment %}\";\r\n                }\r\n                record.lines = linesEnd;\r\n                record.types = \"template_end\";\r\n                recordPush(data, record, \"\");\r\n                return;\r\n            }\r\n            // a type correction for template tags who have variable start tag names but a\r\n            // consistent ending tag name\r\n            if (element.indexOf(\"{{\") === 0 && element.slice(element.length - 2) === \"}}\") {\r\n                if (tname === \"end\") {\r\n                    ltype = \"template_end\";\r\n                }\r\n                else if (tname === \"else\") {\r\n                    ltype = \"template_else\";\r\n                }\r\n            }\r\n            else if (element.slice(0, 2) === \"<%\" && element.slice(element.length - 2) === \"%>\") {\r\n                if ((/^(<%\\s+end\\s+-?%>)$/).test(element) === true) {\r\n                    ltype = \"template_end\";\r\n                }\r\n                else if (((/\\sdo\\s/).test(element) === true && (/\\s-?%>$/).test(element) === true) || (/^(<%(%|-|=)?\\s*if)/).test(element) === true) {\r\n                    ltype = \"template_start\";\r\n                }\r\n            }\r\n            record.types = ltype;\r\n            //update a flag for subatomic parsing in SGML tags\r\n            if (end !== \"]>\" && sgmlflag > 0 && element.charAt(element.length - 1) !== \"[\" && (element.slice(element.length - 2) === \"]>\" || (/^(<!((doctype)|(notation))\\s)/i).test(element) === true)) {\r\n                sgmlflag = sgmlflag - 1;\r\n            }\r\n            // cheat identifies HTML singleton elements as singletons even if formatted as\r\n            // start tags, such as <br> (which is really <br/>)\r\n            cheat = (function lexer_markup_tag_cheat() {\r\n                let cfval = \"\", struc = [];\r\n                const ender = (/(\\/>)$/), htmlsings = {\r\n                    area: \"singleton\",\r\n                    base: \"singleton\",\r\n                    basefont: \"singleton\",\r\n                    br: \"singleton\",\r\n                    col: \"singleton\",\r\n                    embed: \"singleton\",\r\n                    eventsource: \"singleton\",\r\n                    frame: \"singleton\",\r\n                    hr: \"singleton\",\r\n                    image: \"singleton\",\r\n                    img: \"singleton\",\r\n                    input: \"singleton\",\r\n                    isindex: \"singleton\",\r\n                    keygen: \"singleton\",\r\n                    link: \"singleton\",\r\n                    meta: \"singleton\",\r\n                    param: \"singleton\",\r\n                    progress: \"singleton\",\r\n                    source: \"singleton\",\r\n                    wbr: \"singleton\"\r\n                }, fixsingleton = function lexer_markup_tag_cheat_fixsingleton() {\r\n                    let aa = parse.count, bb = 0;\r\n                    const vname = tname.slice(1);\r\n                    if (aa > -1) {\r\n                        do {\r\n                            if (data.types[aa] === \"end\") {\r\n                                bb = bb + 1;\r\n                            }\r\n                            else if (data.types[aa] === \"start\") {\r\n                                bb = bb - 1;\r\n                                if (bb < 0) {\r\n                                    return false;\r\n                                }\r\n                            }\r\n                            if (bb === 0 && data.token[aa].toLowerCase().indexOf(vname) === 1) {\r\n                                if (cftags[tname] === undefined) {\r\n                                    data.types[aa] = \"start\";\r\n                                }\r\n                                else {\r\n                                    data.types[aa] = \"template_start\";\r\n                                }\r\n                                count.start = count.start + 1;\r\n                                data.token[aa] = data\r\n                                    .token[aa]\r\n                                    .replace(/(\\s*\\/>)$/, \">\");\r\n                                return false;\r\n                            }\r\n                            aa = aa - 1;\r\n                        } while (aa > -1);\r\n                    }\r\n                    return false;\r\n                }, peertest = function lexer_markup_tag_cheat_peertest(name, item) {\r\n                    if (htmlblocks[name] === undefined) {\r\n                        return false;\r\n                    }\r\n                    if (name === item) {\r\n                        return true;\r\n                    }\r\n                    if (name === \"dd\" && item === \"dt\") {\r\n                        return true;\r\n                    }\r\n                    if (name === \"dt\" && item === \"dd\") {\r\n                        return true;\r\n                    }\r\n                    if (name === \"td\" && item === \"th\") {\r\n                        return true;\r\n                    }\r\n                    if (name === \"th\" && item === \"td\") {\r\n                        return true;\r\n                    }\r\n                    if (name === \"colgroup\" && (item === \"tbody\" || item === \"tfoot\" || item === \"thead\" || item === \"tr\")) {\r\n                        return true;\r\n                    }\r\n                    if (name === \"tbody\" && (item === \"colgroup\" || item === \"tfoot\" || item === \"thead\")) {\r\n                        return true;\r\n                    }\r\n                    if (name === \"tfoot\" && (item === \"colgroup\" || item === \"tbody\" || item === \"thead\")) {\r\n                        return true;\r\n                    }\r\n                    if (name === \"thead\" && (item === \"colgroup\" || item === \"tbody\" || item === \"tfoot\")) {\r\n                        return true;\r\n                    }\r\n                    if (name === \"tr\" && item === \"colgroup\") {\r\n                        return true;\r\n                    }\r\n                    return false;\r\n                }, addHtmlEnd = function (count) {\r\n                    record.lines = (data.lines[parse.count] > 0) ? 1 : 0;\r\n                    record.token = `</${parse.structure[parse.structure.length - 1][0]}>`;\r\n                    record.types = \"end\";\r\n                    recordPush(data, record, \"\");\r\n                    if (count > 0) {\r\n                        do {\r\n                            record.begin = parse.structure[parse.structure.length - 1][1];\r\n                            record.stack = parse.structure[parse.structure.length - 1][0];\r\n                            record.token = `</${parse.structure[parse.structure.length - 1][0]}>`;\r\n                            recordPush(data, record, \"\");\r\n                            count = count - 1;\r\n                        } while (count > 0);\r\n                    }\r\n                    record.begin = parse.structure[parse.structure.length - 1][1];\r\n                    record.lines = parse.linesSpace;\r\n                    record.stack = parse.structure[parse.structure.length - 1][0];\r\n                    record.token = element;\r\n                    record.types = \"end\";\r\n                    data.lines[parse.count - 1] = 0;\r\n                };\r\n                //determine if the current end tag is actually part of an HTML singleton\r\n                if (ltype === \"end\" && tname.slice(0, 3) !== \"/cf\") {\r\n                    const lastToken = data.token[parse.count];\r\n                    if (data.types[parse.count - 1] === \"singleton\" && lastToken.charAt(lastToken.length - 2) !== \"/\" && \"/\" + tagName(lastToken) === tname) {\r\n                        data.types[parse.count - 1] = \"start\";\r\n                    }\r\n                    else if (tname !== \"/span\" &&\r\n                        tname !== \"/div\" &&\r\n                        tname !== \"/script\" &&\r\n                        options.lexer_options.markup.tag_merge === true &&\r\n                        (html !== \"html\" || (html === \"html\" && tname !== \"/li\"))) {\r\n                        if (tname === \"/\" + tagName(data.token[parse.count]) && data.types[parse.count] === \"start\") {\r\n                            parse.structure.pop();\r\n                            data.token[parse.count] = data\r\n                                .token[parse.count]\r\n                                .replace(/>$/, \"/>\");\r\n                            data.types[parse.count] = \"singleton\";\r\n                            singleton = true;\r\n                            count.start = count.start - 1;\r\n                            return false;\r\n                        }\r\n                        if (tname === \"/\" + tagName(data.token[data.begin[parse.count]]) && data.types[parse.count].indexOf(\"attribute\") > -1 && data.types[data.begin[parse.count]] === \"start\") {\r\n                            parse.structure.pop();\r\n                            data.token[data.begin[parse.count]] = data\r\n                                .token[data.begin[parse.count]]\r\n                                .replace(/>$/, \"/>\");\r\n                            data.types[data.begin[parse.count]] = \"singleton\";\r\n                            singleton = true;\r\n                            count.start = count.start - 1;\r\n                            return false;\r\n                        }\r\n                    }\r\n                }\r\n                //renames the types value for the following two template tags\r\n                if (tname === \"/#assign\" || tname === \"/#global\") {\r\n                    let dd = parse.count - 1, tcount = 1;\r\n                    if (dd > -1) {\r\n                        do {\r\n                            if (data.types[dd] === \"start\" || data.types[dd] === \"template_start\") {\r\n                                tcount = tcount - 1;\r\n                            }\r\n                            else if (data.types[dd] === \"end\" || data.types[dd] === \"template_end\") {\r\n                                tcount = tcount + 1;\r\n                            }\r\n                            if (tcount === 1) {\r\n                                if ((data.token[dd].indexOf(\"<#assign\") === 0 && tname === \"/#assign\") || (data.token[dd].indexOf(\"<#global\") === 0 && tname === \"/#global\")) {\r\n                                    data.types[dd] = \"template_start\";\r\n                                    count.start = count.start + 1;\r\n                                    return false;\r\n                                }\r\n                            }\r\n                            if (tcount === 0) {\r\n                                return false;\r\n                            }\r\n                            dd = dd - 1;\r\n                        } while (dd > -1);\r\n                    }\r\n                    return false;\r\n                }\r\n                //determines if custom coldfusion tags are singletons\r\n                cfval = cftags[tname];\r\n                if (data.types[parse.count] === \"end\" && tname.slice(0, 3) === \"/cf\" && cfval !== undefined) {\r\n                    if (tname === \"/cftransaction\") {\r\n                        cftransaction = false;\r\n                    }\r\n                    if (cfval !== undefined) {\r\n                        data.types[parse.count] = \"template_end\";\r\n                    }\r\n                    if ((cfval === \"optional\" || cfval === \"prohibited\") && tname !== \"/cftransaction\") {\r\n                        return fixsingleton();\r\n                    }\r\n                    return false;\r\n                }\r\n                //processes all other coldfusion tags\r\n                if (tname.slice(0, 2) === \"cf\") {\r\n                    if (tname === \"cfelse\" || tname === \"cfelseif\") {\r\n                        record.token = element;\r\n                        record.types = \"template_else\";\r\n                        recordPush(data, record, tname);\r\n                        singleton = true;\r\n                        return false;\r\n                    }\r\n                    if (tname === \"cftransaction\" && cftransaction === true) {\r\n                        if (element.charAt(1) === \"/\") {\r\n                            record.types = \"template_end\";\r\n                        }\r\n                        else {\r\n                            cfval = \"prohibited\";\r\n                        }\r\n                    }\r\n                    else {\r\n                        cfval = cftags[tname];\r\n                    }\r\n                    if (tname === \"cfscript\" && element.indexOf(\"</cfscript\") !== 0) {\r\n                        ext = true;\r\n                    }\r\n                    if (cfval === \"optional\" || cfval === \"prohibited\" || tname.slice(0, 3) === \"cf_\") {\r\n                        if (options.correct === true && ender.test(element) === false) {\r\n                            element = element.slice(0, element.length - 1) + \"/>\";\r\n                        }\r\n                        record.token = element.replace(/\\s+/, \" \");\r\n                        record.types = \"template\";\r\n                        // The following madness is required because cfmodule may be a singleton or a block.\r\n                        // You don't know until you encounter the end tag\r\n                        if (tname === \"cfmodule\" && element.charAt(1) === \"/\") {\r\n                            let ss = parse.count, tt = 1;\r\n                            do {\r\n                                if (data.token[ss].toLowerCase() === \"<cfmodule>\") {\r\n                                    tt = tt - 1;\r\n                                    if (tt < 1) {\r\n                                        break;\r\n                                    }\r\n                                }\r\n                                else if (data.token[ss].toLowerCase() === \"</cfmodule>\") {\r\n                                    tt = tt + 1;\r\n                                }\r\n                                ss = ss - 1;\r\n                            } while (ss > -1);\r\n                            data.types[ss] = \"template_start\";\r\n                            count.start = count.start + 1;\r\n                            tt = Math.min(ss + 1, parse.count);\r\n                            struc = [[\"cfmodule\", ss]];\r\n                            ss = parse.count + 1;\r\n                            do {\r\n                                data.begin[tt] = struc[struc.length - 1][1];\r\n                                data.stack[tt] = struc[struc.length - 1][0];\r\n                                if (data.types[tt] === \"end\" || data.types[tt].indexOf(\"_end\") > 0) {\r\n                                    if (struc.length > 1) {\r\n                                        struc.pop();\r\n                                    }\r\n                                }\r\n                                else if (data.types[tt] === \"start\" || data.types[tt].indexOf(\"_start\") > 0) {\r\n                                    struc.push([tagName(data.token[tt]), tt]);\r\n                                }\r\n                                tt = tt + 1;\r\n                            } while (tt < ss);\r\n                            parse.structure.push(struc[0]);\r\n                            record.begin = struc[0][1];\r\n                            record.stack = \"cfmodule\";\r\n                            record.types = \"template_end\";\r\n                        }\r\n                        recordPush(data, record, \"\");\r\n                        singleton = true;\r\n                        return false;\r\n                    }\r\n                    if (cfval === \"required\" && tname !== \"cfquery\") {\r\n                        if (tname === \"cftransaction\" && cftransaction === false) {\r\n                            cftransaction = true;\r\n                        }\r\n                        record.token = element;\r\n                        record.types = (ltype === \"end\")\r\n                            ? \"template_end\"\r\n                            : \"template_start\";\r\n                        recordPush(data, record, tname);\r\n                        singleton = true;\r\n                    }\r\n                    return false;\r\n                }\r\n                if (html === \"html\") {\r\n                    // html gets tag names in lowercase, if you want to preserve case sensitivity\r\n                    // beautify as XML\r\n                    if (element.charAt(0) === \"<\" && element.charAt(1) !== \"!\" && element.charAt(1) !== \"?\" && (parse.count < 0 || data.types[parse.count].indexOf(\"template\") < 0) && cftags[tname] === undefined && tname.slice(0, 3) !== \"cf_\") {\r\n                        element = element.toLowerCase();\r\n                    }\r\n                    if (htmlblocks[parse.structure[parse.structure.length - 1][0]] === \"block\" && peertest(tname.slice(1), parse.structure[parse.structure.length - 2][0]) === true) {\r\n                        // looks for HTML tags missing an ending pair when encountering an ending tag for a parent node\r\n                        addHtmlEnd(0);\r\n                    }\r\n                    else if (parse.structure.length > 3 &&\r\n                        htmlblocks[parse.structure[parse.structure.length - 1][0]] === \"block\" &&\r\n                        htmlblocks[parse.structure[parse.structure.length - 2][0]] === \"block\" &&\r\n                        htmlblocks[parse.structure[parse.structure.length - 3][0]] === \"block\" &&\r\n                        peertest(tname, parse.structure[parse.structure.length - 4][0]) === true) {\r\n                        // looks for consecutive missing end tags\r\n                        addHtmlEnd(3);\r\n                    }\r\n                    else if (parse.structure.length > 2 &&\r\n                        htmlblocks[parse.structure[parse.structure.length - 1][0]] === \"block\" &&\r\n                        htmlblocks[parse.structure[parse.structure.length - 2][0]] === \"block\" &&\r\n                        peertest(tname, parse.structure[parse.structure.length - 3][0]) === true) {\r\n                        // looks for consecutive missing end tags\r\n                        addHtmlEnd(2);\r\n                    }\r\n                    else if (parse.structure.length > 1 &&\r\n                        htmlblocks[parse.structure[parse.structure.length - 1][0]] === \"block\" &&\r\n                        peertest(tname, parse.structure[parse.structure.length - 2][0]) === true) {\r\n                        // looks for consecutive missing end tags\r\n                        addHtmlEnd(1);\r\n                    }\r\n                    else if (peertest(tname, parse.structure[parse.structure.length - 1][0]) === true) {\r\n                        // certain tags cannot contain other certain tags if such tags are peers\r\n                        addHtmlEnd(0);\r\n                    }\r\n                    else if (tname.charAt(0) === \"/\" && htmlblocks[parse.structure[parse.structure.length - 1][0]] === \"block\" && parse.structure[parse.structure.length - 1][0] !== tname.slice(1)) {\r\n                        // looks for consecutive missing end tags if the current element is an end tag\r\n                        fixHtmlEnd(element, false);\r\n                        record.begin = parse.structure[parse.structure.length - 1][1];\r\n                        record.lines = parse.linesSpace;\r\n                        record.stack = parse.structure[parse.structure.length - 1][0];\r\n                        record.token = element;\r\n                        record.types = \"end\";\r\n                        data.lines[parse.count - 1] = 0;\r\n                    }\r\n                    // generalized corrections for the handling of singleton tags\r\n                    if (data.types[parse.count] === \"end\" && htmlsings[tname.slice(1)] === \"singleton\" && element.toLowerCase().indexOf(\"/cftransaction\") !== 1) {\r\n                        return fixsingleton();\r\n                    }\r\n                    //inserts a trailing slash into singleton tags if they do not already have it\r\n                    if (htmlsings[tname] === \"singleton\") {\r\n                        if (options.correct === true && ender.test(element) === false) {\r\n                            element = element.slice(0, element.length - 1) + \" />\";\r\n                        }\r\n                        return true;\r\n                    }\r\n                }\r\n                return false;\r\n            }());\r\n            //This escape flag is set in the cheat function\r\n            if (singleton === true) {\r\n                attributeRecord();\r\n                return;\r\n            }\r\n            //tags with the following names are singletons\r\n            if (tname.charAt(0) === \"#\" && data.types[parse.count] === \"start\" && (tname === \"#assign\" || tname === \"#break\" || tname === \"#case\" || tname === \"#default\" || tname === \"#fallback\" || tname === \"#flush\" || tname === \"#ftl\" || tname === \"#global\" || tname === \"#import\" || tname === \"#include\" || tname === \"#local\" || tname === \"#t\" || tname === \"#lt\" || tname === \"#rt\" || tname === \"#nested\" || tname === \"#nt\" || tname === \"#recover\" || tname === \"#recurse\" || tname === \"#return\" || tname === \"#sep\" || tname === \"#setting\" || tname === \"#stop\" || tname === \"#visit\")) {\r\n                simple = true;\r\n            }\r\n            //correction for dustjs tags to template singleton types\r\n            if (options.language === \"dustjs\" && data.types[parse.count] === \"template_start\") {\r\n                const first = element.charAt(1), ending = element.slice(element.length - 2);\r\n                if ((ending === \"/}\" || ending.charAt(0) === first) && (first === \"#\" || first === \"?\" || first === \"^\" || first === \"@\" || first === \"<\" || first === \"+\")) {\r\n                    data.types[parse.count] = \"template\";\r\n                }\r\n            }\r\n            // determine if the markup tag potentially contains code interpreted by a\r\n            // different lexer\r\n            if ((tname === \"script\" || tname === \"style\" || tname === \"cfscript\") && element.slice(element.length - 2) !== \"/>\") {\r\n                //get the attribute value for \"type\"\r\n                let len = attstore.length - 1, attValue = \"\", attr = [];\r\n                if (len > -1) {\r\n                    do {\r\n                        attr = arname(attstore[len][0]);\r\n                        if (attr[0] === \"type\") {\r\n                            attValue = attr[1];\r\n                            if (attValue.charAt(0) === \"\\\"\" || attValue.charAt(0) === \"'\") {\r\n                                attValue = attValue.slice(1, attValue.length - 1);\r\n                            }\r\n                            break;\r\n                        }\r\n                        len = len - 1;\r\n                    } while (len > -1);\r\n                }\r\n                //ext is flag to send information between the tag lexer and the content lexer\r\n                if (tname === \"script\" && (attValue === \"\" || attValue === \"text/javascript\" || attValue === \"babel\" || attValue === \"module\" || attValue === \"application/javascript\" || attValue === \"application/x-javascript\" || attValue === \"text/ecmascript\" || attValue === \"application/ecmascript\" || attValue === \"text/jsx\" || attValue === \"application/jsx\" || attValue === \"text/cjs\")) {\r\n                    ext = true;\r\n                }\r\n                else if (tname === \"style\" && options.language !== \"jsx\" && (attValue === \"\" || attValue === \"text/css\")) {\r\n                    ext = true;\r\n                }\r\n                else if (tname === \"cfscript\") {\r\n                    ext = true;\r\n                }\r\n                if (ext === true) {\r\n                    len = a + 1;\r\n                    if (len < c) {\r\n                        do {\r\n                            if ((/\\s/).test(b[len]) === false) {\r\n                                if (b[len] === \"<\") {\r\n                                    if (b.slice(len + 1, len + 4).join(\"\") === \"!--\") {\r\n                                        len = len + 4;\r\n                                        if (len < c) {\r\n                                            do {\r\n                                                if ((/\\s/).test(b[len]) === false) {\r\n                                                    ext = false;\r\n                                                    break;\r\n                                                }\r\n                                                if (b[len] === \"\\n\" || b[len] === \"\\r\") {\r\n                                                    break;\r\n                                                }\r\n                                                len = len + 1;\r\n                                            } while (len < c);\r\n                                        }\r\n                                    }\r\n                                    else {\r\n                                        ext = false;\r\n                                    }\r\n                                }\r\n                                break;\r\n                            }\r\n                            len = len + 1;\r\n                        } while (len < c);\r\n                    }\r\n                }\r\n            }\r\n            //am I a singleton or a start type?\r\n            if (simple === true && ignoreme === false && ltype !== \"xml\" && ltype !== \"sgml\") {\r\n                if (cheat === true || element.slice(element.length - 2) === \"/>\") {\r\n                    ltype = \"singleton\";\r\n                }\r\n                else {\r\n                    ltype = \"start\";\r\n                }\r\n                record.types = ltype;\r\n            }\r\n            // additional logic is required to find the end of a tag with the attribute\r\n            // data-parse-ignore\r\n            if (simple === true && preserve === false && ignoreme && end === \">\" && element.slice(element.length - 2) !== \"/>\") {\r\n                let tags = [], atstring = [];\r\n                if (cheat === true) {\r\n                    ltype = \"singleton\";\r\n                }\r\n                else {\r\n                    attstore.forEach(function lexer_markup_tag_atstore(value) {\r\n                        atstring.push(value[0]);\r\n                    });\r\n                    preserve = true;\r\n                    ltype = \"ignore\";\r\n                    a = a + 1;\r\n                    if (a < c) {\r\n                        let delim = \"\", ee = 0, ff = 0, endtag = false;\r\n                        do {\r\n                            if (b[a] === \"\\n\") {\r\n                                parse.lineNumber = parse.lineNumber + 1;\r\n                            }\r\n                            tags.push(b[a]);\r\n                            if (delim === \"\") {\r\n                                if (b[a] === \"\\\"\") {\r\n                                    delim = \"\\\"\";\r\n                                }\r\n                                else if (b[a] === \"'\") {\r\n                                    delim = \"'\";\r\n                                }\r\n                                else if (tags[0] !== \"{\" && b[a] === \"{\" && (options.language === \"dustjs\" || b[a + 1] === \"{\" || b[a + 1] === \"%\" || b[a + 1] === \"@\" || b[a + 1] === \"#\")) {\r\n                                    if (b[a + 1] === \"{\") {\r\n                                        if (b[a + 2] === \"{\") {\r\n                                            delim = \"}}}\";\r\n                                        }\r\n                                        else {\r\n                                            delim = \"}}\";\r\n                                        }\r\n                                    }\r\n                                    else if (options.language === \"dustjs\") {\r\n                                        delim = \"}\";\r\n                                    }\r\n                                    else {\r\n                                        delim = b[a + 1] + \"}\";\r\n                                    }\r\n                                }\r\n                                else if (b[a] === \"<\" && simple === true) {\r\n                                    if (b[a + 1] === \"/\") {\r\n                                        endtag = true;\r\n                                    }\r\n                                    else {\r\n                                        endtag = false;\r\n                                    }\r\n                                }\r\n                                else if (b[a] === lastchar && b[a - 1] !== \"/\") {\r\n                                    if (endtag === true) {\r\n                                        igcount = igcount - 1;\r\n                                        if (igcount < 0) {\r\n                                            break;\r\n                                        }\r\n                                    }\r\n                                    else {\r\n                                        igcount = igcount + 1;\r\n                                    }\r\n                                }\r\n                            }\r\n                            else if (b[a] === delim.charAt(delim.length - 1)) {\r\n                                ff = 0;\r\n                                ee = delim.length - 1;\r\n                                if (ee > -1) {\r\n                                    do {\r\n                                        if (b[a - ff] !== delim.charAt(ee)) {\r\n                                            break;\r\n                                        }\r\n                                        ff = ff + 1;\r\n                                        ee = ee - 1;\r\n                                    } while (ee > -1);\r\n                                }\r\n                                if (ee < 0) {\r\n                                    delim = \"\";\r\n                                }\r\n                            }\r\n                            a = a + 1;\r\n                        } while (a < c);\r\n                    }\r\n                }\r\n                element = element + tags.join(\"\");\r\n                element = element.replace(\">\", ` ${atstring.join(\" \")}>`);\r\n                record.token = element;\r\n                record.types = \"content-ignore\";\r\n                attstore = [];\r\n            }\r\n            // some template tags can be evaluated as a block start/end based on syntax\r\n            // alone\r\n            if (record.types.indexOf(\"template\") > -1) {\r\n                if (element.slice(0, 2) === \"{%\") {\r\n                    let names = [\r\n                        \"autoescape\",\r\n                        \"case\",\r\n                        \"capture\",\r\n                        \"comment\",\r\n                        \"embed\",\r\n                        \"filter\",\r\n                        \"for\",\r\n                        \"form\",\r\n                        \"if\",\r\n                        \"macro\",\r\n                        \"paginate\",\r\n                        \"raw\",\r\n                        \"sandbox\",\r\n                        \"spaceless\",\r\n                        \"switch\",\r\n                        \"tablerow\",\r\n                        \"unless\",\r\n                        \"verbatim\"\r\n                    ];\r\n                    if ((tname === \"case\" || tname === \"default\") && (parse.structure[parse.structure.length - 1][0] === \"switch\" || parse.structure[parse.structure.length - 1][0] === \"case\")) {\r\n                        record.types = \"template_else\";\r\n                    }\r\n                    else if (tname === \"else\" || tname === \"elseif\" || tname === \"when\" || tname === \"elif\" || tname === \"elsif\") {\r\n                        record.types = \"template_else\";\r\n                    }\r\n                    else {\r\n                        let namelen = names.length - 1;\r\n                        do {\r\n                            if (tname === names[namelen]) {\r\n                                record.types = \"template_start\";\r\n                                break;\r\n                            }\r\n                            if (tname === \"end\" + names[namelen]) {\r\n                                record.types = \"template_end\";\r\n                                break;\r\n                            }\r\n                            namelen = namelen - 1;\r\n                        } while (namelen > -1);\r\n                    }\r\n                }\r\n                else if (element.slice(0, 2) === \"<%\" && options.language === \"silverstripe\") {\r\n                    if (tname === \"if\" || tname === \"loop\" || tname === \"with\" || tname === \"control\" || tname === \"cached\" || tname === \"uncached\") {\r\n                        record.types = \"template_start\";\r\n                    }\r\n                    else if (tname === \"else\" || tname === \"else_if\") {\r\n                        record.types = \"template_else\";\r\n                    }\r\n                    else if (tname === \"end_if\" || tname === \"end_loop\" || tname === \"end_with\" || tname === \"end_control\" || tname === \"end_cached\" || tname === \"end_uncached\") {\r\n                        record.types = \"template_end\";\r\n                    }\r\n                }\r\n                else if (element.slice(0, 2) === \"{{\" && element.charAt(3) !== \"{\") {\r\n                    if ((/^(\\{\\{\\s*-?\\s*end\\s*-?\\s*\\}\\})$/).test(element) === true) {\r\n                        record.types = \"template_end\";\r\n                    }\r\n                    else if (tname === \"define\" || tname === \"form\" || tname === \"if\" || tname === \"range\" || tname === \"with\") {\r\n                        record.types = \"template_start\";\r\n                    }\r\n                }\r\n                else if (record.types === \"template\") {\r\n                    if (element.indexOf(\"else\") > 2) {\r\n                        record.types = \"template_else\";\r\n                    }\r\n                    else if ((/^(<%\\s*\\})/).test(element) === true || (/^(\\[%\\s*\\})/).test(element) === true || (/^(\\{@\\s*\\})/).test(element) === true) {\r\n                        record.types = \"template_end\";\r\n                    }\r\n                    else if ((/(\\{\\s*%>)$/).test(element) === true || (/(\\{\\s*%\\])$/).test(element) === true || (/(\\{\\s*@\\})$/).test(element) === true) {\r\n                        record.types = \"template_start\";\r\n                    }\r\n                    else if ((/\\{\\s*\\?>$/).test(element) === true) {\r\n                        record.types = \"template_start\";\r\n                    }\r\n                    else if ((/^<\\?(=|(php))\\s*\\}/).test(element) === true) {\r\n                        record.types = \"template_end\";\r\n                    }\r\n                }\r\n                if (record.types === \"template_start\" || record.types === \"template_else\") {\r\n                    if ((/^<\\?(=|(php))\\s*/).test(element) === true) {\r\n                        tname = element;\r\n                    }\r\n                    else if (tname === \"\" || tname === \"@\" || tname === \"#\" || tname === \"%\") {\r\n                        tname = tname + element.slice(1).replace(tname, \"\").replace(/^\\s+/, \"\");\r\n                        tname = tname.slice(0, tname.indexOf(\"(\")).replace(/\\s+/, \"\");\r\n                    }\r\n                }\r\n            }\r\n            // identify script and style hidden within a CDATA escape\r\n            if (ltype === \"cdata\" && (record.stack === \"script\" || record.stack === \"style\")) {\r\n                let counta = parse.count, countb = parse.count, stack = record.stack;\r\n                if (data.types[countb] === \"attribute\") {\r\n                    do {\r\n                        counta = counta - 1;\r\n                        countb = countb - 1;\r\n                    } while (data.types[countb] === \"attribute\" && countb > -1);\r\n                }\r\n                record.begin = counta;\r\n                element = element\r\n                    .replace(/^(\\s*<!\\[cdata\\[)/i, \"\")\r\n                    .replace(/(\\]\\]>\\s*)$/, \"\");\r\n                record.token = \"<![CDATA[\";\r\n                record.types = \"cdata_start\";\r\n                recordPush(data, record, \"\");\r\n                parse.structure.push([\"cdata\", parse.count]);\r\n                if (stack === \"script\") {\r\n                    sparser.lexers.script(element);\r\n                }\r\n                else {\r\n                    sparser.lexers.style(element);\r\n                }\r\n                record.begin = parse.structure[parse.structure.length - 1][1];\r\n                record.token = \"]]>\";\r\n                record.types = \"cdata_end\";\r\n                recordPush(data, record, \"\");\r\n                parse.structure.pop();\r\n            }\r\n            else {\r\n                recordPush(data, record, tname);\r\n            }\r\n            attributeRecord();\r\n            // inserts a script space in anticipation of word wrap since JSX has unique white space rules\r\n            if (options.wrap > 0 && options.language === \"jsx\") {\r\n                let current_length = 0, bb = parse.count, cc = 0;\r\n                if (data.types[bb].indexOf(\"attribute\") > -1) {\r\n                    do {\r\n                        current_length = current_length + data.token[bb].length + 1;\r\n                        bb = bb - 1;\r\n                    } while (data.lexer[bb] !== \"markup\" || data.types[bb].indexOf(\"attribute\") > -1);\r\n                    if (data.lines[bb] === 1) {\r\n                        current_length = current_length + data.token[bb].length + 1;\r\n                    }\r\n                }\r\n                else if (data.lines[bb] === 1) {\r\n                    current_length = data.token[bb].length + 1;\r\n                }\r\n                cc = bb - 1;\r\n                if (current_length > 0 && data.types[cc] !== \"script_end\") {\r\n                    if (data.types[cc].indexOf(\"attribute\") > -1) {\r\n                        do {\r\n                            current_length = current_length + data.token[cc].length + 1;\r\n                            cc = cc - 1;\r\n                        } while (data.lexer[cc] !== \"markup\" || data.types[cc].indexOf(\"attribute\") > -1);\r\n                        if (data.lines[cc] === 1) {\r\n                            current_length = current_length + data.token[cc].length + 1;\r\n                        }\r\n                    }\r\n                    else if (data.lines[cc] === 1) {\r\n                        current_length = data.token[cc].length + 1;\r\n                    }\r\n                    if (current_length > options.wrap && data.lines[bb] === 1) {\r\n                        record.begin = data.begin[bb];\r\n                        record.ender = bb + 2;\r\n                        record.lexer = data.lexer[bb];\r\n                        record.lines = 1;\r\n                        record.stack = data.stack[bb];\r\n                        record.token = \"{\";\r\n                        record.types = \"script_start\";\r\n                        parse.splice({\r\n                            data: data,\r\n                            howmany: 0,\r\n                            index: bb,\r\n                            record: record\r\n                        });\r\n                        record.begin = bb;\r\n                        record.lexer = \"script\";\r\n                        record.lines = 0;\r\n                        record.stack = \"script\";\r\n                        if (options.quote_convert === \"single\") {\r\n                            record.token = \"' '\";\r\n                        }\r\n                        else {\r\n                            record.token = \"\\\" \\\"\";\r\n                        }\r\n                        record.types = \"string\";\r\n                        parse.splice({\r\n                            data: data,\r\n                            howmany: 0,\r\n                            index: bb + 1,\r\n                            record: record\r\n                        });\r\n                        record.lexer = \"markup\";\r\n                        record.token = \"}\";\r\n                        record.types = \"script_end\";\r\n                        parse.splice({\r\n                            data: data,\r\n                            howmany: 0,\r\n                            index: bb + 2,\r\n                            record: record\r\n                        });\r\n                        data.ender[bb + 3] = data.ender[bb + 3] + 3;\r\n                        bb = bb + 4;\r\n                        do {\r\n                            data.begin[bb] = data.begin[bb] + 3;\r\n                            data.ender[bb] = data.ender[bb] + 3;\r\n                            bb = bb + 1;\r\n                        } while (bb < parse.count);\r\n                    }\r\n                }\r\n            }\r\n            //sorts child elements\r\n            if (options.lexer_options.markup.tag_sort === true && data.types[parse.count] === \"end\" && data.types[parse.count - 1] !== \"start\" && tname !== \"/script\" && tname !== \"/style\" && tname !== \"/cfscript\") {\r\n                let bb = 0, d = 0, startStore = 0, jsxatt = false, endData;\r\n                const children = [], store = {\r\n                    begin: [],\r\n                    ender: [],\r\n                    lexer: [],\r\n                    lines: [],\r\n                    stack: [],\r\n                    token: [],\r\n                    types: []\r\n                }, storeRecord = function lexer_markup_tag_sorttag_storeRecord(index) {\r\n                    const output = {\r\n                        begin: data.begin[index],\r\n                        ender: data.ender[index],\r\n                        lexer: data.lexer[index],\r\n                        lines: data.lines[index],\r\n                        stack: data.stack[index],\r\n                        token: data.token[index],\r\n                        types: data.types[index]\r\n                    };\r\n                    return output;\r\n                }, childsort = function lexer_markup_tag_sorttag_childsort(a, b) {\r\n                    if (data.token[a[0]] > data.token[b[0]]) {\r\n                        return -1;\r\n                    }\r\n                    return 1;\r\n                };\r\n                bb = parse.count - 1;\r\n                if (bb > -1) {\r\n                    let endStore = 0;\r\n                    do {\r\n                        if (data.types[bb] === \"start\") {\r\n                            d = d - 1;\r\n                            if (d < 0) {\r\n                                startStore = bb + 1;\r\n                                if (data.types[startStore] === \"attribute\" || data.types[startStore] === \"jsx_attribute_start\") {\r\n                                    jsxatt = false;\r\n                                    do {\r\n                                        startStore = startStore + 1;\r\n                                        if (jsxatt === false && data.types[startStore] !== \"attribute\") {\r\n                                            break;\r\n                                        }\r\n                                        if (data.types[startStore] === \"jsx_attribute_start\") {\r\n                                            jsxatt = true;\r\n                                        }\r\n                                        else if (data.types[startStore] === \"jsx_attribute_end\") {\r\n                                            jsxatt = false;\r\n                                        }\r\n                                    } while (startStore < c);\r\n                                }\r\n                                break;\r\n                            }\r\n                        }\r\n                        else if (data.types[bb] === \"end\") {\r\n                            d = d + 1;\r\n                            if (d === 1) {\r\n                                endStore = bb;\r\n                            }\r\n                        }\r\n                        if (d === 0) {\r\n                            if (data.types[bb] === \"start\") {\r\n                                children.push([bb, endStore]);\r\n                            }\r\n                            else {\r\n                                if (data.types[bb] === \"singleton\" && (data.types[bb + 1] === \"attribute\" || data.types[bb + 1] === \"jsx_attribute_start\")) {\r\n                                    let cc = bb + 1;\r\n                                    jsxatt = false;\r\n                                    do {\r\n                                        if (data.types[cc] === \"jsx_attribute_start\") {\r\n                                            jsxatt = true;\r\n                                        }\r\n                                        else if (data.types[cc] === \"jsx_attribute_end\") {\r\n                                            jsxatt = false;\r\n                                        }\r\n                                        if (jsxatt === false && data.types[cc + 1] !== \"attribute\" && data.types[cc + 1] !== \"jsx_attribute_start\") {\r\n                                            break;\r\n                                        }\r\n                                        cc = cc + 1;\r\n                                    } while (cc < parse.count);\r\n                                    children.push([bb, cc]);\r\n                                }\r\n                                else if (data.types[bb] !== \"attribute\" && data.types[bb] !== \"jsx_attribute_start\") {\r\n                                    children.push([bb, bb]);\r\n                                }\r\n                            }\r\n                        }\r\n                        bb = bb - 1;\r\n                    } while (bb > -1);\r\n                }\r\n                if (children.length < 2) {\r\n                    return;\r\n                }\r\n                children.sort(childsort);\r\n                bb = children.length - 1;\r\n                if (bb > -1) {\r\n                    do {\r\n                        recordPush(store, storeRecord(children[bb][0]), \"\");\r\n                        if (children[bb][0] !== children[bb][1]) {\r\n                            d = children[bb][0] + 1;\r\n                            if (d < children[bb][1]) {\r\n                                do {\r\n                                    recordPush(store, storeRecord(d), \"\");\r\n                                    d = d + 1;\r\n                                } while (d < children[bb][1]);\r\n                            }\r\n                            recordPush(store, storeRecord(children[bb][1]), \"\");\r\n                        }\r\n                        bb = bb - 1;\r\n                    } while (bb > -1);\r\n                }\r\n                endData = {\r\n                    begin: data.begin.pop(),\r\n                    ender: data.ender.pop(),\r\n                    lexer: data.lexer.pop(),\r\n                    lines: data.lines.pop(),\r\n                    stack: data.stack.pop(),\r\n                    token: data.token.pop(),\r\n                    types: data.types.pop()\r\n                };\r\n                (function lexer_markup_tag_sorttag_slice() {\r\n                    parse.datanames.forEach(function lexer_markup_tag_sorttag_slice_datanames(value) {\r\n                        data[value] = data[value].slice(0, startStore);\r\n                    });\r\n                }());\r\n                parse.concat(data, store);\r\n                count.end = count.end - 1;\r\n                recordPush(data, endData, \"\");\r\n            }\r\n            parse.linesSpace = 0;\r\n        }, \r\n        // parses everything other than markup tags\r\n        content = function lexer_markup_content() {\r\n            let lex = [], ltoke = \"\", jsxbrace = (data.token[parse.count] === \"{\"), liner = parse.linesSpace, now = a;\r\n            const name = (ext === true)\r\n                ? (jsxbrace === true)\r\n                    ? \"script\"\r\n                    : (parse.structure[parse.structure.length - 1][1] > -1)\r\n                        ? tagName(data.token[parse.structure[parse.structure.length - 1][1]].toLowerCase())\r\n                        : tagName(data.token[data.begin[parse.count]].toLowerCase())\r\n                : \"\", square = (data.types[parse.count] === \"template_start\" && data.token[parse.count].indexOf(\"<!\") === 0 && data.token[parse.count].indexOf(\"<![\") < 0 && data.token[parse.count].charAt(data.token[parse.count].length - 1) === \"[\"), record = {\r\n                begin: parse.structure[parse.structure.length - 1][1],\r\n                ender: -1,\r\n                lexer: \"markup\",\r\n                lines: liner,\r\n                stack: parse.structure[parse.structure.length - 1][0],\r\n                token: \"\",\r\n                types: \"content\"\r\n            }, esctest = function lexer_markup_content_esctest() {\r\n                let aa = a - 1, bb = 0;\r\n                if (b[a - 1] !== \"\\\\\") {\r\n                    return false;\r\n                }\r\n                if (aa > -1) {\r\n                    do {\r\n                        if (b[aa] !== \"\\\\\") {\r\n                            break;\r\n                        }\r\n                        bb = bb + 1;\r\n                        aa = aa - 1;\r\n                    } while (aa > -1);\r\n                }\r\n                if (bb % 2 === 1) {\r\n                    return true;\r\n                }\r\n                return false;\r\n            };\r\n            if (a < c) {\r\n                let end = \"\", quote = \"\", quotes = 0;\r\n                do {\r\n                    if (b[a] === \"\\n\") {\r\n                        parse.lineNumber = parse.lineNumber + 1;\r\n                    }\r\n                    // external code requires additional parsing to look for the appropriate end\r\n                    // tag, but that end tag cannot be quoted or commented\r\n                    if (ext === true) {\r\n                        if (quote === \"\") {\r\n                            if (b[a] === \"/\") {\r\n                                if (b[a + 1] === \"*\") {\r\n                                    quote = \"*\";\r\n                                }\r\n                                else if (b[a + 1] === \"/\") {\r\n                                    quote = \"/\";\r\n                                }\r\n                                else if (name === \"script\" && \"([{!=,;.?:&<>\".indexOf(b[a - 1]) > -1) {\r\n                                    if (options.language !== \"jsx\" || b[a - 1] !== \"<\") {\r\n                                        quote = \"reg\";\r\n                                    }\r\n                                }\r\n                            }\r\n                            else if ((b[a] === \"\\\"\" || b[a] === \"'\" || b[a] === \"`\") && esctest() === false) {\r\n                                quote = b[a];\r\n                            }\r\n                            else if (b[a] === \"{\" && jsxbrace === true) {\r\n                                quotes = quotes + 1;\r\n                            }\r\n                            else if (b[a] === \"}\" && jsxbrace === true) {\r\n                                if (quotes === 0) {\r\n                                    sparser.lexers.script(lex.join(\"\").replace(/^(\\s+)/, \"\").replace(/(\\s+)$/, \"\"));\r\n                                    parse.structure[parse.structure.length - 1][1] + 1;\r\n                                    if (data.types[parse.count] === \"end\" && data.lexer[data.begin[parse.count] - 1] === \"script\") {\r\n                                        record.lexer = \"script\";\r\n                                        record.token = (options.correct === true) ? \";\" : \"x;\";\r\n                                        record.types = \"separator\";\r\n                                        recordPush(data, record, \"\");\r\n                                        record.lexer = \"markup\";\r\n                                    }\r\n                                    record.token = \"}\";\r\n                                    record.types = \"script_end\";\r\n                                    recordPush(data, record, \"\");\r\n                                    parse.structure.pop();\r\n                                    break;\r\n                                }\r\n                                quotes = quotes - 1;\r\n                            }\r\n                            end = b\r\n                                .slice(a, a + 10)\r\n                                .join(\"\")\r\n                                .toLowerCase();\r\n                            //cfscript requires use of the script lexer\r\n                            if (name === \"cfscript\" && end === \"</cfscript\") {\r\n                                a = a - 1;\r\n                                if (lex.length < 1) {\r\n                                    break;\r\n                                }\r\n                                sparser.lexers.script(lex.join(\"\").replace(/^(\\s+)/, \"\").replace(/(\\s+)$/, \"\"));\r\n                                break;\r\n                            }\r\n                            //script requires use of the script lexer\r\n                            if (name === \"script\") {\r\n                                if (a === c - 9) {\r\n                                    end = end.slice(0, end.length - 1);\r\n                                }\r\n                                else {\r\n                                    end = end.slice(0, end.length - 2);\r\n                                }\r\n                                if (end === \"</script\") {\r\n                                    let outside = lex.join(\"\").replace(/^(\\s+)/, \"\").replace(/(\\s+)$/, \"\");\r\n                                    a = a - 1;\r\n                                    if (lex.length < 1) {\r\n                                        break;\r\n                                    }\r\n                                    if ((/^(<!--+)/).test(outside) === true && (/(--+>)$/).test(outside) === true) {\r\n                                        record.token = \"<!--\";\r\n                                        record.types = \"comment\";\r\n                                        recordPush(data, record, \"\");\r\n                                        outside = outside.replace(/^(<!--+)/, \"\").replace(/(--+>)$/, \"\");\r\n                                        sparser.lexers.script(outside);\r\n                                        record.token = \"-->\";\r\n                                        recordPush(data, record, \"\");\r\n                                    }\r\n                                    else {\r\n                                        sparser.lexers.script(outside);\r\n                                    }\r\n                                    break;\r\n                                }\r\n                            }\r\n                            //style requires use of the style lexer\r\n                            if (name === \"style\") {\r\n                                if (a === c - 8) {\r\n                                    end = end.slice(0, end.length - 1);\r\n                                }\r\n                                else if (a === c - 9) {\r\n                                    end = end.slice(0, end.length - 2);\r\n                                }\r\n                                else {\r\n                                    end = end.slice(0, end.length - 3);\r\n                                }\r\n                                if (end === \"</style\") {\r\n                                    let outside = lex.join(\"\").replace(/^(\\s+)/, \"\").replace(/(\\s+)$/, \"\");\r\n                                    a = a - 1;\r\n                                    if (lex.length < 1) {\r\n                                        break;\r\n                                    }\r\n                                    if ((/^(<!--+)/).test(outside) === true && (/(--+>)$/).test(outside) === true) {\r\n                                        record.token = \"<!--\";\r\n                                        record.types = \"comment\";\r\n                                        recordPush(data, record, \"\");\r\n                                        outside = outside.replace(/^(<!--+)/, \"\").replace(/(--+>)$/, \"\");\r\n                                        sparser.lexers.style(outside);\r\n                                        record.token = \"-->\";\r\n                                        recordPush(data, record, \"\");\r\n                                    }\r\n                                    else {\r\n                                        sparser.lexers.style(outside);\r\n                                    }\r\n                                    break;\r\n                                }\r\n                            }\r\n                        }\r\n                        else if (quote === b[a] && (quote === \"\\\"\" || quote === \"'\" || quote === \"`\" || (quote === \"*\" && b[a + 1] === \"/\")) && esctest() === false) {\r\n                            quote = \"\";\r\n                        }\r\n                        else if (quote === \"`\" && b[a] === \"$\" && b[a + 1] === \"{\" && esctest() === false) {\r\n                            quote = \"}\";\r\n                        }\r\n                        else if (quote === \"}\" && b[a] === \"}\" && esctest() === false) {\r\n                            quote = \"`\";\r\n                        }\r\n                        else if (quote === \"/\" && (b[a] === \"\\n\" || b[a] === \"\\r\")) {\r\n                            quote = \"\";\r\n                        }\r\n                        else if (quote === \"reg\" && b[a] === \"/\" && esctest() === false) {\r\n                            quote = \"\";\r\n                        }\r\n                        else if (quote === \"/\" && b[a] === \">\" && b[a - 1] === \"-\" && b[a - 2] === \"-\") {\r\n                            end = b\r\n                                .slice(a + 1, a + 11)\r\n                                .join(\"\")\r\n                                .toLowerCase();\r\n                            if (name === \"cfscript\" && end === \"</cfscript\") {\r\n                                quote = \"\";\r\n                            }\r\n                            end = end.slice(0, end.length - 2);\r\n                            if (name === \"script\" && end === \"</script\") {\r\n                                quote = \"\";\r\n                            }\r\n                            end = end.slice(0, end.length - 1);\r\n                            if (name === \"style\" && end === \"</style\") {\r\n                                quote = \"\";\r\n                            }\r\n                        }\r\n                    }\r\n                    //typically this logic is for artifacts nested within an SGML tag\r\n                    if (square === true && b[a] === \"]\") {\r\n                        a = a - 1;\r\n                        ltoke = lex.join(\"\");\r\n                        if (options.lexer_options.markup.parse_space === false) {\r\n                            ltoke = ltoke.replace(/\\s+$/, \"\");\r\n                        }\r\n                        liner = 0;\r\n                        record.token = ltoke;\r\n                        recordPush(data, record, \"\");\r\n                        break;\r\n                    }\r\n                    //general content processing\r\n                    if (ext === false && lex.length > 0 && ((b[a] === \"<\" && b[a + 1] !== \"=\" && (/\\s|\\d/).test(b[a + 1]) === false) || (b[a] === \"[\" && b[a + 1] === \"%\") || (b[a] === \"{\" && (options.language === \"jsx\" || options.language === \"dustjs\" || b[a + 1] === \"{\" || b[a + 1] === \"%\" || b[a + 1] === \"@\" || b[a + 1] === \"#\")))) {\r\n                        //dustjs template handling\r\n                        if (options.language === \"dustjs\" && b[a] === \"{\" && b[a + 1] === \":\" && b[a + 2] === \"e\" && b[a + 3] === \"l\" && b[a + 4] === \"s\" && b[a + 5] === \"e\" && b[a + 6] === \"}\") {\r\n                            a = a + 6;\r\n                            ltoke = lex.join(\"\");\r\n                            if (options.lexer_options.markup.parse_space === false) {\r\n                                ltoke = ltoke.replace(/\\s+$/, \"\");\r\n                            }\r\n                            liner = 0;\r\n                            record.token = ltoke;\r\n                            recordPush(data, record, \"\");\r\n                            record.token = \"{:else}\";\r\n                            record.types = \"template_else\";\r\n                            recordPush(data, record, \"\");\r\n                            break;\r\n                        }\r\n                        //regular content\r\n                        a = a - 1;\r\n                        if (options.lexer_options.markup.parse_space === true || parse.structure[parse.structure.length - 1][0] === \"comment\") {\r\n                            ltoke = lex.join(\"\");\r\n                        }\r\n                        else {\r\n                            ltoke = lex.join(\"\").replace(/\\s+$/, \"\");\r\n                        }\r\n                        ltoke = bracketSpace(ltoke);\r\n                        liner = 0;\r\n                        record.token = ltoke;\r\n                        if (options.wrap > 0 && options.lexer_options.markup.preserve_text !== true) {\r\n                            let aa = options.wrap, len = ltoke.length, startSpace = \"\", endSpace = \"\";\r\n                            const wrap = options.wrap, store = [], wrapper = function beautify_markup_apply_content_wrapper() {\r\n                                if (ltoke.charAt(aa) === \" \") {\r\n                                    store.push(ltoke.slice(0, aa));\r\n                                    ltoke = ltoke.slice(aa + 1);\r\n                                    len = ltoke.length;\r\n                                    aa = wrap;\r\n                                    return;\r\n                                }\r\n                                do {\r\n                                    aa = aa - 1;\r\n                                } while (aa > 0 && ltoke.charAt(aa) !== \" \");\r\n                                if (aa > 0) {\r\n                                    store.push(ltoke.slice(0, aa));\r\n                                    ltoke = ltoke.slice(aa + 1);\r\n                                    len = ltoke.length;\r\n                                    aa = wrap;\r\n                                }\r\n                                else {\r\n                                    aa = wrap;\r\n                                    do {\r\n                                        aa = aa + 1;\r\n                                    } while (aa < len && ltoke.charAt(aa) !== \" \");\r\n                                    store.push(ltoke.slice(0, aa));\r\n                                    ltoke = ltoke.slice(aa + 1);\r\n                                    len = ltoke.length;\r\n                                    aa = wrap;\r\n                                }\r\n                            };\r\n                            // HTML anchor lists do not get wrapping unless the content itself exceeds the wrapping limit\r\n                            if (data.token[data.begin[parse.count]] === \"<a>\" &&\r\n                                data.token[data.begin[data.begin[parse.count]]] === \"<li>\" &&\r\n                                data.lines[data.begin[parse.count]] === 0 &&\r\n                                parse.linesSpace === 0 &&\r\n                                ltoke.length < options.wrap) {\r\n                                recordPush(data, record, \"\");\r\n                                break;\r\n                            }\r\n                            if (len < wrap) {\r\n                                recordPush(data, record, \"\");\r\n                                break;\r\n                            }\r\n                            if (parse.linesSpace < 1) {\r\n                                let bb = parse.count;\r\n                                do {\r\n                                    aa = aa - data.token[bb].length;\r\n                                    if (data.types[bb].indexOf(\"attribute\") > -1) {\r\n                                        aa = aa - 1;\r\n                                    }\r\n                                    if (data.lines[bb] > 0 && data.types[bb].indexOf(\"attribute\") < 0) {\r\n                                        break;\r\n                                    }\r\n                                    bb = bb - 1;\r\n                                } while (bb > 0 && aa > 0);\r\n                                if (aa < 1) {\r\n                                    aa = ltoke.indexOf(\" \");\r\n                                }\r\n                            }\r\n                            ltoke = lex.join(\"\");\r\n                            if (options.lexer_options.markup.parse_space === true) {\r\n                                startSpace = ((/\\s/).test(ltoke.charAt(0)) === true)\r\n                                    ? (/\\s+/).exec(ltoke)[0]\r\n                                    : \"\";\r\n                                endSpace = ((/\\s/).test(ltoke.charAt(ltoke.length - 1)) === true)\r\n                                    ? (/\\s+$/).exec(ltoke)[0]\r\n                                    : \"\";\r\n                            }\r\n                            ltoke = ltoke.replace(/^\\s+/, \"\").replace(/\\s+$/, \"\").replace(/\\s+/g, \" \");\r\n                            do {\r\n                                wrapper();\r\n                            } while (aa < len);\r\n                            if (ltoke !== \"\" && ltoke !== \" \") {\r\n                                store.push(ltoke);\r\n                            }\r\n                            if (options.crlf === true) {\r\n                                ltoke = store.join(\"\\r\\n\");\r\n                            }\r\n                            else {\r\n                                ltoke = store.join(\"\\n\");\r\n                            }\r\n                            ltoke = startSpace + ltoke + endSpace;\r\n                        }\r\n                        liner = 0;\r\n                        record.token = ltoke;\r\n                        recordPush(data, record, \"\");\r\n                        break;\r\n                    }\r\n                    lex.push(b[a]);\r\n                    a = a + 1;\r\n                } while (a < c);\r\n            }\r\n            if (options.lexer_options.markup.parse_space === false) {\r\n                if (a > now && a < c) {\r\n                    if ((/\\s/).test(b[a]) === true) {\r\n                        let x = a;\r\n                        parse.linesSpace = 1;\r\n                        do {\r\n                            if (b[x] === \"\\n\") {\r\n                                parse.linesSpace = parse.linesSpace + 1;\r\n                            }\r\n                            x = x - 1;\r\n                        } while (x > now && (/\\s/).test(b[x]) === true);\r\n                    }\r\n                    else {\r\n                        parse.linesSpace = 0;\r\n                    }\r\n                }\r\n                else if (a !== now || (a === now && ext === false)) {\r\n                    //regular content at the end of the supplied source\r\n                    ltoke = lex.join(\"\").replace(/\\s+$/, \"\");\r\n                    liner = 0;\r\n                    //this condition prevents adding content that was just added in the loop above\r\n                    if (record.token !== ltoke) {\r\n                        record.token = ltoke;\r\n                        recordPush(data, record, \"\");\r\n                        parse.linesSpace = 0;\r\n                    }\r\n                }\r\n            }\r\n            ext = false;\r\n        };\r\n        // trim the attribute_sort_list values\r\n        if (asl > 0) {\r\n            do {\r\n                attribute_sort_list[a] = attribute_sort_list[a].replace(/^\\s+/, \"\").replace(/\\s+$/, \"\");\r\n                a = a + 1;\r\n            } while (a < asl);\r\n            a = 0;\r\n        }\r\n        if (options.language === \"html\") {\r\n            html = \"html\";\r\n        }\r\n        else if (options.language === \"xml\" || options.language === \"sgml\") {\r\n            html = \"xml\";\r\n        }\r\n        do {\r\n            if ((/\\s/).test(b[a]) === true) {\r\n                if (options.lexer_options.markup.parse_space === true || (data.types[parse.count] === \"template_start\" && parse.structure[parse.structure.length - 1][0] === \"comment\")) {\r\n                    content();\r\n                }\r\n                else {\r\n                    a = parse.spacer({ array: b, end: c, index: a });\r\n                }\r\n            }\r\n            else if (ext) {\r\n                content();\r\n            }\r\n            else if (b[a] === \"<\") {\r\n                tag(\"\");\r\n            }\r\n            else if (b[a] === \"[\" && b[a + 1] === \"%\") {\r\n                tag(\"%]\");\r\n            }\r\n            else if (b[a] === \"{\" && (options.language === \"jsx\" || options.language === \"dustjs\" || b[a + 1] === \"{\" || b[a + 1] === \"%\" || b[a + 1] === \"@\" || b[a + 1] === \"#\")) {\r\n                tag(\"\");\r\n            }\r\n            else if (b[a] === \"]\" && sgmlflag > 0) {\r\n                tag(\"]>\");\r\n            }\r\n            else if (options.language === \"vapor\") {\r\n                if (b[a] === \"#\") {\r\n                    tag(\")\");\r\n                }\r\n                else if (b[a] === \"{\" && data.token[parse.count].charAt(0) === \"#\") {\r\n                    vaporStart();\r\n                }\r\n                else if (b[a] === \"}\") {\r\n                    vaporEnd();\r\n                }\r\n                else {\r\n                    content();\r\n                }\r\n            }\r\n            else if (options.language === \"jekyll\" && b[a] === \"-\" && b[a + 1] === \"-\" && b[a + 2] === \"-\") {\r\n                tag(\"---\");\r\n            }\r\n            else if (options.language === \"apacheVelocity\" && (/\\d/).test(b[a + 1]) === false && (/\\s/).test(b[a + 1]) === false) {\r\n                if (b[a] === \"#\" && ((/\\w/).test(b[a + 1]) === true || b[a + 1] === \"*\" || b[a + 1] === \"#\" || (b[a + 1] === \"[\" && b[a + 2] === \"[\"))) {\r\n                    tag(\"\");\r\n                }\r\n                else if (b[a] === \"$\" && b[a + 1] !== \"$\" && b[a + 1] !== \"=\" && b[a + 1] !== \"[\") {\r\n                    tag(\"\");\r\n                }\r\n                else {\r\n                    content();\r\n                }\r\n            }\r\n            else {\r\n                content();\r\n            }\r\n            a = a + 1;\r\n        } while (a < c);\r\n        if (data.token[parse.count].charAt(0) !== \"/\" && htmlblocks[parse.structure[parse.structure.length - 1][0]] === \"block\") {\r\n            fixHtmlEnd(data.token[parse.count], true);\r\n        }\r\n        if (count.end !== count.start && sparser.parseerror === \"\") {\r\n            if (count.end > count.start) {\r\n                let x = count.end - count.start, plural = (x === 1)\r\n                    ? \"\"\r\n                    : \"s\";\r\n                sparser.parseerror = `${x} more end type${plural} than start types.`;\r\n            }\r\n            else {\r\n                let x = count.start - count.end, plural = (x === 1)\r\n                    ? \"\"\r\n                    : \"s\";\r\n                sparser.parseerror = `${x} more start type${plural} than end types.`;\r\n            }\r\n        }\r\n        return data;\r\n    };\r\n    sparser.lexers.markup = markup;\r\n}());\r\nglobal.sparser=sparser;module.exports=sparser;return sparser;}());"]}