{"version":3,"file":"index.mjs","sources":["../src/constants.ts","../src/handler/utils/color.ts","../src/handler/utils/common.ts","../src/handler/utils/extend.ts","../src/utils/array.ts","../src/utils/escape.ts","../src/utils/has-own-property.ts","../src/utils/object.ts","../src/utils/string.ts","../src/handler/utils/find.ts","../src/token/constants.ts","../src/token/module.ts","../src/token/tokenize/bbcode.ts","../src/token/tokenize/html.ts","../src/token/utils/empty.ts","../src/token/utils/has.ts","../src/token/utils/parse.ts","../src/token/utils/nesting.ts","../src/token/utils/normalize.ts","../src/converter/bbcode/html.ts","../src/converter/html/bbcode.ts","../src/handler/constants.ts","../src/handler/module.ts","../src/parser/constants.ts","../src/parser/utils/bbcode-cleanup.ts","../src/parser/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum QuoteType {\n    /**\n     * Always quote the attribute value\n     */\n    always = 'always',\n\n    /**\n     * Never quote the attributes value\n     */\n    never = 'never',\n\n    /**\n     * Only quote the attributes value when it contains spaces to equals\n     */\n    auto = 'auto',\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\n/**\n * Convert 10base to 16base.\n *\n * @param input\n */\nfunction toHex(input: string | number) {\n    let number: number | string = parseInt(`${input}`, 10);\n\n    if (Number.isNaN(number)) {\n        return '00';\n    }\n\n    number = Math.max(0, Math.min(number, 255)).toString(16);\n\n    return number.length < 2 ? `0${number}` : number;\n}\n\n/**\n * Convert rgb, rgba to hex code.\n *\n * @param input\n */\nexport function normaliseColor(input: string) : string {\n    input = input || '#000';\n\n    let match = input.match(/rgb\\((\\d{1,3}),\\s*?(\\d{1,3}),\\s*?(\\d{1,3})\\)/i);\n    // rgb(n,n,n);\n    if (match) {\n        return `#${toHex(match[1])}${toHex(match[2])}${toHex(match[3])}`;\n    }\n\n    match = input.match(/#([0-f])([0-f])([0-f])\\s*?$/i);\n\n    // expand shorthand\n    if (match) {\n        return `#${match[1]}${match[1]}${match[2]}${match[2]}${match[3]}${match[3]}`;\n    }\n\n    return input;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function stripQuotes(str: string) : string {\n    return str ? str.replace(/\\\\(.)/g, '$1').replace(/^([\"'])(.*?)\\1$/, '$2') : str;\n}\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Handler } from '../type';\n\nexport function extendHandler(handler: Handler) {\n    return {\n        ...{\n            isSelfClosing: false,\n            isInline: true,\n            allowsEmpty: false,\n            excludeClosing: false,\n            skipLastLineBreak: false,\n            strictMatch: false,\n            breakBefore: false,\n            breakStart: false,\n            breakEnd: false,\n            breakAfter: false,\n        } as Partial<Handler>,\n        ...handler,\n    };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function lastArrayElement<T>(arr: T[]) : T | undefined {\n    if (arr.length) {\n        return arr[arr.length - 1];\n    }\n\n    return undefined;\n}\n","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function escapeCharacters(str: string, noQuotes?: boolean) {\n    if (!str) {\n        return str;\n    }\n\n    const replacements : Record<string, string> = {\n        '&': '&amp;',\n        '<': '&lt;',\n        '>': '&gt;',\n        '  ': '&nbsp; ',\n        '\\r\\n': '<br />',\n        '\\r': '<br />',\n        '\\n': '<br />',\n    };\n\n    if (noQuotes !== false) {\n        replacements['\"'] = '&#34;';\n        replacements['\\''] = '&#39;';\n        replacements['`'] = '&#96;';\n    }\n\n    str = str.replace(/ {2}|\\r\\n|[&<>\\r\\n'\"`]/g, (match) => replacements[match] || match);\n\n    return str;\n}\n\nconst VALID_SCHEME_REGEX = /^(https?|s?ftp|mailto|spotify|skype|ssh|teamspeak|tel):|(\\/\\/)|data:image\\/(png|bmp|gif|p?jpe?g);/i;\n\nexport function escapeUriScheme(url: string) {\n    let path : string[] = [];\n    // If there is a : before a / then it has a scheme\n    const hasScheme = /^[^/]*:/i;\n\n    // Has no scheme or a valid scheme\n    if ((!url || !hasScheme.test(url)) || VALID_SCHEME_REGEX.test(url)) {\n        return url;\n    }\n\n    if (\n        typeof window !== 'undefined' &&\n        window.location\n    ) {\n        const { location } = window;\n\n        path = location.pathname.split('/');\n        path.pop();\n\n        return `${location.protocol}//${location.host}${path.join('/')}/${url}`;\n    }\n\n    return url;\n}\n","/*\n * Copyright (c) 2021.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function hasOwnProperty<X extends {}, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown> {\n    return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function getObjectPathValue(data: Record<string, any>, key: string) : any {\n    const index = key.indexOf('.');\n    const currentKey = index === -1 ?\n        key :\n        key.substring(0, index);\n\n    if (index === -1) {\n        return data[currentKey];\n    }\n\n    if (!isObject(data[currentKey])) {\n        return undefined;\n    }\n\n    const nextKey = key.substring(currentKey.length + 1);\n    return getObjectPathValue(data[currentKey], nextKey);\n}\n\nexport function isObject(item: unknown) : item is Record<string, any> {\n    return (\n        !!item &&\n        typeof item === 'object' &&\n        !Array.isArray(item)\n    );\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport { escapeCharacters } from './escape';\n\nexport function formatString(str: string, obj: Record<string, any>) {\n    return str.replace(/\\{([^}]+)\\}/g, (match, group) => {\n        let escape = true;\n\n        if (group.charAt(0) === '!') {\n            escape = false;\n            group = group.substring(1);\n        }\n\n        if (group === '0') {\n            escape = false;\n        }\n\n        if (typeof obj[group] === 'undefined') {\n            return match;\n        }\n\n        return escape ? escapeCharacters(obj[group], true) : obj[group];\n    });\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Token } from '../../token';\nimport type { Handlers } from '../module';\nimport type { Condition, Handler } from '../type';\nimport { hasOwnProperty, isObject } from '../../utils';\n\n/**\n *\n * @param one\n * @param two\n */\nfunction isMatch(one: unknown, two: unknown) {\n    if (!one) {\n        return true;\n    }\n\n    if (Array.isArray(one)) {\n        if (\n            typeof two !== 'string' &&\n            typeof two !== 'number'\n        ) {\n            return false;\n        }\n\n        return one.some((item) => typeof item === 'string' && item.trim() === `${two}`.trim());\n    }\n\n    if (!isObject(one) || !isObject(two)) {\n        return false;\n    }\n\n    const keys = Object.keys(one);\n    for (let i = 0; i < keys.length; i++) {\n        if (!hasOwnProperty(one, keys[i]) || !hasOwnProperty(two, keys[i])) {\n            return false;\n        }\n\n        if (!one[keys[i]]) {\n            // eslint-disable-next-line no-continue\n            continue;\n        }\n\n        if (!isMatch(one[keys[i]], two[keys[i]])) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\nfunction isHTMLConditionMatch(condition: Condition, token: Token) : boolean {\n    if (\n        !condition.tag &&\n        !condition.attribute\n    ) {\n        return false;\n    }\n\n    if (\n        condition.tag\n    ) {\n        if (condition.tag !== token.name.toLowerCase()) {\n            return false;\n        }\n    }\n\n    if (\n        condition.attribute\n    ) {\n        const keys = Object.keys(condition.attribute);\n        for (let i = 0; i < keys.length; i++) {\n            if (!isMatch(condition.attribute, token.attrs)) {\n                return false;\n            }\n        }\n    }\n\n    return true;\n}\n\nfunction isHandlerMatch(handler: Handler, token: Token) : boolean {\n    if (typeof handler.conditions === 'undefined') {\n        return false;\n    }\n\n    for (let i = 0; i < handler.conditions.length; i++) {\n        if (isHTMLConditionMatch(handler.conditions[i], token)) {\n            return true;\n        }\n    }\n\n    return false;\n}\n\nexport function findHandlerForHTMLToken(handlers: Handlers, token?: Token) : Handler | undefined {\n    if (typeof token === 'undefined') {\n        return undefined;\n    }\n    const items = handlers.get();\n    const keys = Object.keys(items);\n\n    for (let i = 0; i < keys.length; i++) {\n        if (isHandlerMatch(items[keys[i]], token)) {\n            return items[keys[i]];\n        }\n    }\n\n    return undefined;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum TokenType {\n    OPEN = 'open',\n    CONTENT = 'content',\n    NEWLINE = 'newline',\n    CLOSE = 'close',\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { TokenType } from './constants';\nimport type { TokenAttributes } from './type';\n\nexport class Token {\n    public type : `${TokenType}`;\n\n    public name: string;\n\n    public value: string;\n\n    public attrs: TokenAttributes;\n\n    public children: Token[];\n\n    public closing: Token | null;\n\n    constructor(\n        type: `${TokenType}`,\n        name: string,\n        value: string,\n        attrs?: TokenAttributes,\n        children?: Token[],\n        closing?: Token,\n    ) {\n        this.type = type;\n        this.name = name;\n        this.value = value;\n\n        this.attrs = attrs || [];\n        this.children = children || [];\n        this.closing = closing || null;\n    }\n\n    clone() : Token {\n        return new Token(\n            this.type,\n            this.name,\n            this.value,\n            { ...this.attrs },\n            [],\n            this.closing ? this.closing.clone() : undefined,\n        );\n    }\n\n    splitAt(splitAt: Token) {\n        let offsetLength;\n        const clone = this.clone();\n        const offset = this.children.indexOf(splitAt);\n\n        if (offset > -1) {\n            // Work out how many items are on the right side of the split\n            // to pass to splice()\n            offsetLength = this.children.length - offset;\n            clone.children = this.children.splice(offset, offsetLength);\n        }\n\n        return clone;\n    }\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { stripQuotes } from '../../handler/utils';\nimport { TokenType } from '../constants';\nimport type { Handlers } from '../../handler';\nimport { Token } from '../module';\nimport type { TokenAttributes } from '../type';\n\nconst attrRegex = /([^\\s=]+)=(?:([\"'])((?:\\\\\\2|(?!\\2))*?)\\2|((?:.(?!\\s\\S+=))*.))/g;\n\nexport function tokenizeAttrs(attrs: string) : Record<string, any> {\n    let matches : string[] | null = [];\n    /**\n     * ([^\\s=]+)                Anything that's not a space or equals\n     *         =                        Equals sign =\n     *         (?:\n     *             (?:\n     *                 ([\"'])                    The opening quote\n     *                 (\n     *                     (?:\\\\\\2|[^\\2])*?    Anything that isn't the unescaped opening quote\n     *                 )\n     *                 \\2                        The opening quote again which\n     *                                         will close the string\n     *             )\n     *                 |                If not a quoted string then match\n     *             (\n     *                 (?:.(?!\\s\\S+=))*.?        Anything that isn't part of\n     *                                         [space][non-space][=] which\n     *                                         would be a new attribute\n     *             )\n     *         )\n     */\n    const ret : TokenAttributes = {};\n\n    // if only one attribute then remove the = from the start and\n    // strip any quotes\n    if (attrs.charAt(0) === '=' && attrs.indexOf('=', 1) < 0) {\n        ret.default = stripQuotes(attrs.substring(1));\n    } else {\n        if (attrs.charAt(0) === '=') {\n            attrs = `default${attrs}`;\n        }\n\n        // No need to strip quotes here, the regex will do that.\n        // eslint-disable-next-line no-cond-assign\n        while ((matches = attrRegex.exec(attrs))) {\n            ret[matches[1].toLowerCase()] = stripQuotes(matches[3]) || matches[4];\n        }\n    }\n\n    return ret;\n}\n\nexport function tokenizeTag(type: `${TokenType}`, input: string, handlerManager: Handlers) {\n    let matches : string[] | null = [];\n    let attrs;\n    let name;\n\n    // Extract the name and attributes from opening tags and\n    // just the name from closing tags.\n    matches = input.match(/\\[([^\\]\\s=]+)(?:([^\\]]+))?\\]/);\n\n    if (type === TokenType.OPEN && matches) {\n        name = matches[1].toLowerCase();\n\n        if (matches[2]) {\n            matches[2] = matches[2].trim();\n            attrs = tokenizeAttrs(matches[2]);\n        }\n    }\n\n    matches = input.match(/\\[\\/([^[\\]]+)\\]/);\n\n    if (type === TokenType.CLOSE && matches) {\n        name = matches[1].toLowerCase();\n    }\n\n    if (type === TokenType.NEWLINE) {\n        name = '#newline';\n    }\n\n    // Treat all tokens without a name and\n    // all unknown BBCodes as content\n    if (!name || ((type === TokenType.OPEN || type === TokenType.CLOSE) && !handlerManager.get(name))) {\n        type = TokenType.CONTENT;\n        name = '#';\n    }\n\n    return new Token(type, name, input, attrs);\n}\n\nexport function tokenizeBBCode(input: string, handlerManager: Handlers) : Token[] {\n    // The token types in reverse order of precedence\n    const tokenTypes : {type: `${TokenType}`, regex: RegExp}[] = [\n        { type: TokenType.CONTENT, regex: /^([^[\\r\\n]+|\\[)/ },\n        { type: TokenType.NEWLINE, regex: /^(\\r\\n|\\r|\\n)/ },\n        { type: TokenType.OPEN, regex: /^\\[[^[\\]]+\\]/ },\n        { type: TokenType.CLOSE, regex: /^\\[\\/[^[\\]]+\\]/ },\n    ];\n\n    let matches : string[] | null = [];\n    let type : `${TokenType}`;\n    let i : number;\n    const tokens = [];\n\n    // eslint-disable-next-line no-labels,no-restricted-syntax\n    inputLoop:\n    while (input.length) {\n        i = tokenTypes.length;\n        while (i--) {\n            type = tokenTypes[i].type;\n\n            // Check if the string matches any of the tokens\n            matches = input.match(tokenTypes[i].regex);\n            if (!matches || !matches[0]) {\n                // eslint-disable-next-line no-continue\n                continue;\n            }\n\n            // Add the match to the tokens list\n            tokens.push(tokenizeTag(type, matches[0], handlerManager));\n\n            // Remove the match from the string\n            input = input.substring(matches[0].length);\n\n            // The token has been added so start again\n            // eslint-disable-next-line no-continue,no-labels\n            continue inputLoop;\n        }\n\n        // If there is anything left in the string which doesn't match\n        // any of the tokens then just assume it's content and add it.\n        if (input.length) {\n            tokens.push(tokenizeTag(TokenType.CONTENT, input, handlerManager));\n        }\n\n        input = '';\n    }\n\n    return tokens;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { HTMLElement, Node, TextNode } from 'node-html-parser';\nimport { NodeType, parse } from 'node-html-parser';\nimport { Token } from '../module';\nimport { TokenType } from '../constants';\n\nfunction parseStyles(input: string) {\n    return input\n        .split(';')\n        .filter((style) => style.split(':')[0] && style.split(':')[1])\n        .map((style) => [\n            style.split(':')[0].trim().replace(/-./g, (c) => c.substring(1).toUpperCase()),\n            style.split(':')[1].trim(),\n        ])\n        .reduce((styleObj, style) => ({\n            ...styleObj,\n            [style[0]]: style[1],\n        }), {});\n}\n\nconst selfClosingTags : string[] = [\n    'area',\n    'base',\n    'br',\n    'col',\n    'embed',\n    'hr',\n    'img',\n    'input',\n    'link',\n    'meta',\n    'param',\n    'source',\n    'track',\n    'wbr',\n];\n\nfunction parseNode(node: Node) : Token[] {\n    const tokens : Token[] = [];\n\n    switch (node.nodeType) {\n        case NodeType.ELEMENT_NODE: {\n            const element = node as HTMLElement;\n            if (element.rawTagName) {\n                const children : Token[] = [];\n                for (let i = 0; i < element.childNodes.length; i++) {\n                    children.push(...parseNode(element.childNodes[i]));\n                }\n\n                let closingToken : Token | undefined;\n                if (selfClosingTags.indexOf(element.tagName.toLowerCase()) === -1) {\n                    closingToken = new Token(\n                        TokenType.CLOSE,\n                        element.tagName.toLowerCase(),\n                        `</${element.tagName.toLowerCase()}>`,\n                    );\n                }\n\n                const token = new Token(\n                    TokenType.OPEN,\n                    element.tagName.toLowerCase(),\n                    `<${element.tagName.toLowerCase()}>`,\n                    {\n                        ...element.attrs,\n                        ...(element.attrs.style ? { style: parseStyles(element.attrs.style) } : {}),\n                        class: Array.from(element.classList.values()),\n                    },\n                    children,\n                    closingToken,\n                );\n\n                tokens.push(token);\n            } else {\n                for (let i = 0; i < element.childNodes.length; i++) {\n                    tokens.push(...parseNode(element.childNodes[i]));\n                }\n            }\n            break;\n        }\n        case NodeType.TEXT_NODE: {\n            const text = node as TextNode;\n            tokens.push(new Token(TokenType.CONTENT, '#', text.text));\n            break;\n        }\n        case NodeType.COMMENT_NODE:\n            break;\n    }\n\n    return tokens;\n}\n\nexport function tokenizeHTML(input: string) : Token[] {\n    const htmlElement = parse(input);\n\n    return parseNode(htmlElement);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Token } from '../module';\nimport type { Handler, Handlers } from '../../handler';\nimport { TokenType } from '../constants';\n\nexport function removeEmptyTokens(tokens: Token[], handlerManager: Handlers) {\n    let token : Token;\n    let bbcode : Handler | undefined;\n\n    /**\n     * Checks if all children are whitespace or not\n     * @private\n     */\n    const isTokenWhiteSpace = (children: Token[]) => {\n        let j = children.length;\n\n        while (j--) {\n            const { type } = children[j];\n\n            if (type === TokenType.OPEN || type === TokenType.CLOSE) {\n                return false;\n            }\n\n            if (type === TokenType.CONTENT && /\\S|\\u00A0/.test(children[j].value)) {\n                return false;\n            }\n        }\n\n        return true;\n    };\n\n    let i = tokens.length;\n    while (i--) {\n        // So skip anything that isn't a tag since only tags can be\n        // empty, content can't\n        token = tokens[i];\n\n        if (!token || token.type !== TokenType.OPEN) {\n            // eslint-disable-next-line no-continue\n            continue;\n        }\n\n        bbcode = handlerManager.get(token.name);\n\n        // Remove any empty children of this tag first so that if they\n        // are all removed this one doesn't think it's not empty.\n        removeEmptyTokens(token.children, handlerManager);\n\n        if (\n            isTokenWhiteSpace(token.children) &&\n            bbcode &&\n            !bbcode.isSelfClosing &&\n            !bbcode.allowsEmpty\n        ) {\n            tokens.splice(i, 1);\n        }\n    }\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport type { TokenType } from '../constants';\nimport type { Token } from '../module';\n\nexport function hasToken(arr: Token[], name: string, type: `${TokenType}`) {\n    let i = arr.length;\n\n    while (i--) {\n        if (arr[i].type === type && arr[i].name === name) {\n            return true;\n        }\n    }\n\n    return false;\n}\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { TokenType } from '../constants';\nimport type { Token } from '../module';\nimport type { ChildAllowedCheckContext, TokenParseContext } from '../type';\nimport { hasToken } from './has';\nimport type { Handler } from '../../handler';\nimport { lastArrayElement } from '../../utils';\n\nexport function isChildAllowed(context: ChildAllowedCheckContext) {\n    const parentBBCode = context.parent ? context.handlers.get(context.parent.name) : {} as Handler;\n\n    if (\n        context.fixInvalidChildren &&\n        parentBBCode &&\n        parentBBCode.allowedChildren\n    ) {\n        return parentBBCode.allowedChildren.indexOf(context.child.name || '#') > -1;\n    }\n\n    return true;\n}\n\nexport function parseTokens(context: TokenParseContext) {\n    let token : Token | undefined;\n    let handler : Handler | undefined;\n    let curTok : Token | undefined;\n    let clone : Token;\n    let i;\n    let next;\n\n    const cloned : Token[] = [];\n    const output : Token[] = [];\n    const openTags : Token[] = [];\n\n    const currentTag = () => lastArrayElement(openTags);\n    const addTag = (token: Token) => {\n        const curr = currentTag();\n        if (curr) {\n            curr.children.push(token);\n        } else {\n            output.push(token);\n        }\n    };\n\n    const closesCurrentTag = (name: string) => {\n        const tag = currentTag();\n        if (!tag) {\n            return false;\n        }\n\n        const bbcode = context.handlers.get(tag.name);\n        if (!bbcode) {\n            return false;\n        }\n\n        return bbcode.closedBy && bbcode.closedBy.indexOf(name) > -1;\n    };\n\n    // eslint-disable-next-line no-cond-assign\n    while ((token = context.items.shift())) {\n        // eslint-disable-next-line prefer-destructuring\n        next = context.items[0];\n\n        /*\n         * Fixes any invalid children.\n         *\n         * If it is an element which isn't allowed as a child of it's\n         * parent then it will be converted to content of the parent\n         * element. i.e.\n         *     [code]Code [b]only[/b] allows text.[/code]\n         * Will become:\n         *     <code>Code [b]only[/b] allows text.</code>\n         * Instead of:\n         *     <code>Code <b>only</b> allows text.</code>\n         */\n        // Ignore tags that can't be children\n        if (!isChildAllowed({\n            handlers: context.handlers,\n            parent: currentTag(),\n            child: token,\n            fixInvalidChildren: context.fixInvalidChildren,\n        })) {\n            const curr = currentTag();\n            // exclude closing tags of current tag\n            if (token.type !== TokenType.CLOSE || !curr || token.name !== curr.name) {\n                token.name = '#';\n                token.type = TokenType.CONTENT;\n            }\n        }\n\n        switch (token.type) {\n            case TokenType.OPEN:\n                // Check it this closes a parent,\n                // e.g. for lists [*]one [*]two\n                if (closesCurrentTag(token.name)) {\n                    openTags.pop();\n                }\n\n                addTag(token);\n                handler = context.handlers.get(token.name);\n\n                // If this tag is not self-closing and it has a closing\n                // tag then it is open and has children so add it to the\n                // list of open tags. If has the closedBy property then\n                // it is closed by other tags so include everything as\n                // it's children until one of those tags is reached.\n                if (\n                    handler &&\n                    !handler.isSelfClosing &&\n                    (\n                        handler.closedBy ||\n                        hasToken(context.items, token.name, TokenType.CLOSE)\n                    )\n                ) {\n                    openTags.push(token);\n                } else if (!handler || !handler.isSelfClosing) {\n                    token.type = TokenType.CONTENT;\n                }\n                break;\n\n            case TokenType.CLOSE: {\n                const curr = currentTag();\n                // check if this closes the current tag,\n                // e.g. [/list] would close an open [*]\n                if (curr && token.name !== curr.name &&\n                    closesCurrentTag(`/${token.name}`)) {\n                    openTags.pop();\n                }\n\n                // If this is closing the currently open tag just pop\n                // the close tag off the open tags array\n                if (curr && token.name === curr.name) {\n                    curr.closing = token;\n                    openTags.pop();\n\n                    // If this is closing an open tag that is the parent of\n                    // the current tag then clone all the tags including the\n                    // current one until reaching the parent that is being\n                    // closed. Close the parent and then add the clones back\n                    // in.\n                } else if (hasToken(openTags, token.name, TokenType.OPEN)) {\n                    // Remove the tag from the open tags\n                    // eslint-disable-next-line no-cond-assign\n                    while ((curTok = openTags.pop())) {\n                        // If it's the tag that is being closed then\n                        // discard it and break the loop.\n                        if (curTok.name === token.name) {\n                            curTok.closing = token;\n                            break;\n                        }\n\n                        // Otherwise clone this tag and then add any\n                        // previously cloned tags as it's children\n                        clone = curTok.clone();\n\n                        if (cloned.length) {\n                            const lastElement = lastArrayElement(cloned);\n                            if (lastElement) {\n                                clone.children.push(lastElement);\n                            }\n                        }\n\n                        cloned.push(clone);\n                    }\n\n                    // Place block linebreak before cloned tags\n                    if (next && next.type === TokenType.NEWLINE) {\n                        handler = context.handlers.get(token.name);\n                        if (handler && handler.isInline === false) {\n                            addTag(next);\n                            context.items.shift();\n                        }\n                    }\n\n                    // Add the last cloned child to the now current tag\n                    // (the parent of the tag which was being closed)\n                    const lastElement = lastArrayElement(cloned);\n                    if (lastElement) {\n                        addTag(lastElement);\n                    }\n\n                    // Add all the cloned tags to the open tags list\n                    i = cloned.length;\n                    while (i--) {\n                        openTags.push(cloned[i]);\n                    }\n\n                    cloned.length = 0;\n\n                    // This tag is closing nothing so treat it as content\n                } else {\n                    token.type = TokenType.CONTENT;\n                    addTag(token);\n                }\n                break;\n            }\n            case TokenType.NEWLINE: {\n                const curr = currentTag();\n\n                // handle things like\n                //     [*]list\\nitem\\n[*]list1\n                // where it should come out as\n                //     [*]list\\nitem[/*]\\n[*]list1[/*]\n                // instead of\n                //     [*]list\\nitem\\n[/*][*]list1[/*]\n                if (\n                    curr &&\n                    next &&\n                    closesCurrentTag((next.type === TokenType.CLOSE ? '/' : '') + next.name)\n                ) {\n                    // skip if the next tag is the closing tag for\n                    // the option tag, i.e. [/*]\n                    if (!(next.type === TokenType.CLOSE && next.name === curr.name)) {\n                        handler = context.handlers.get(curr.name);\n\n                        if (handler && handler.breakAfter) {\n                            openTags.pop();\n                        } else if (handler && handler.isInline === false && handler.breakAfter !== false) {\n                            openTags.pop();\n                        }\n                    }\n                }\n\n                addTag(token);\n                break;\n            }\n            default:\n                addTag(token);\n                break;\n        }\n    }\n\n    return output;\n}\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { TokenType } from '../constants';\nimport type { Token } from '../module';\nimport type { NestingTokenFixContext } from '../type';\nimport { isChildAllowed } from './parse';\nimport { lastArrayElement } from '../../utils';\n\n/**\n * Fixes any invalid nesting.\n *\n * If it is a block level element inside 1 or more inline elements\n * than those inline elements will be split at the point where the\n * block level is and the block level element placed between the split\n * parts. i.e.\n *     [inline]A[blocklevel]B[/blocklevel]C[/inline]\n * Will become:\n *     [inline]A[/inline][blocklevel]B[/blocklevel][inline]C[/inline]\n *\n */\nexport function fixNestingTokens(context: NestingTokenFixContext) {\n    const isInline = (token: Token) => {\n        const handler = context.handlers.get(token.name);\n\n        return !handler || handler.isInline !== false;\n    };\n\n    context.parents = context.parents || [];\n    context.rootArr = context.rootArr || context.children;\n\n    let token: Token;\n    let parent : Token | undefined;\n    let parentIndex : number;\n\n    let parentParentChildren : Token[];\n    let right : Token;\n\n    // This must check the length each time as it can change when\n    // tokens are moved to fix the nesting.\n    for (let i = 0; i < context.children.length; i++) {\n        // eslint-disable-next-line no-cond-assign\n        if (!(token = context.children[i]) || token.type !== TokenType.OPEN) {\n            // eslint-disable-next-line no-continue\n            continue;\n        }\n\n        if (context.insideInlineElement && !isInline(token)) {\n            // if this is a blocklevel element inside an inline one then\n            // split the parent at the block level element\n            parent = lastArrayElement(context.parents);\n            if (!parent) {\n                continue;\n            }\n            right = parent.splitAt(token);\n\n            parentParentChildren = context.parents.length > 1 ?\n                context.parents[context.parents.length - 2].children : context.rootArr;\n\n            // If parent inline is allowed inside this tag, clone it and\n            // wrap this tags children in it.\n            if (isChildAllowed({\n                handlers: context.handlers,\n                parent: token,\n                child: parent,\n                fixInvalidChildren: context.fixInvalidChildren,\n            })) {\n                const clone = parent.clone();\n                clone.children = token.children;\n                token.children = [clone];\n            }\n\n            parentIndex = parentParentChildren.indexOf(parent);\n            if (parentIndex > -1) {\n                // remove the block level token from the right side of\n                // the split inline element\n                right.children.splice(0, 1);\n\n                // insert the block level token and the right side after\n                // the left side of the inline token\n                parentParentChildren.splice(parentIndex + 1, 0, token, right);\n\n                // If token is a block and is followed by a newline,\n                // then move the newline along with it to the new parent\n                const next = right.children[0];\n                if (next && next.type === TokenType.NEWLINE) {\n                    if (!isInline(token)) {\n                        right.children.splice(0, 1);\n                        parentParentChildren.splice(parentIndex + 2, 0, next);\n                    }\n                }\n\n                // return to parents loop as the\n                // children have now increased\n                return;\n            }\n        }\n\n        context.parents.push(token);\n\n        fixNestingTokens({\n            handlers: context.handlers,\n            children: token.children,\n            parents: context.parents,\n            insideInlineElement: context.insideInlineElement || isInline(token),\n            rootArr: context.rootArr,\n            fixInvalidChildren: context.fixInvalidChildren,\n        });\n\n        context.parents.pop();\n    }\n}\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Token } from '../module';\nimport type { TokenNewLinesNormaliseContext } from '../type';\nimport { TokenType } from '../constants';\nimport type { Handler } from '../../handler';\n\n/* istanbul ignore next */\nexport function normalizeTokenNewLines(context: TokenNewLinesNormaliseContext) {\n    const {\n        children, parent, options, onlyRemoveBreakAfter,\n    } = context;\n\n    const childrenLength = children.length;\n\n    let token : Token;\n    let left : Token | undefined;\n    let right : Token | undefined;\n\n    let parentHandler : Handler | undefined;\n    let handler : Handler | undefined;\n\n    let removedBreakEnd;\n    let removedBreakBefore;\n    let remove;\n\n    if (parent) {\n        parentHandler = context.handlers.get(parent.name);\n    }\n\n    let i = childrenLength;\n    while (i--) {\n        // eslint-disable-next-line no-cond-assign\n        if (!(token = children[i])) {\n            // eslint-disable-next-line no-continue\n            continue;\n        }\n\n        if (token.type === TokenType.NEWLINE) {\n            left = i > 0 ? children[i - 1] : undefined;\n            right = i < childrenLength - 1 ? children[i + 1] : undefined;\n            remove = false;\n\n            // Handle the start and end new lines\n            // e.g. [tag]\\n and \\n[/tag]\n            if (\n                !onlyRemoveBreakAfter &&\n                parentHandler &&\n                parentHandler.isSelfClosing !== true\n            ) {\n                // First child of parent so must be opening line break\n                // (breakStartBlock, breakStart) e.g. [tag]\\n\n                if (!left) {\n                    if (\n                        parentHandler.isInline === false &&\n                        options.breakStartBlock &&\n                        parentHandler.breakStart !== false\n                    ) {\n                        remove = true;\n                    }\n\n                    if (parentHandler.breakStart) {\n                        remove = true;\n                    }\n                    // Last child of parent so must be end line break\n                    // (breakEndBlock, breakEnd)\n                    // e.g. \\n[/tag]\n                    // remove last line break (breakEndBlock, breakEnd)\n                } else if (!removedBreakEnd && !right) {\n                    if (\n                        parentHandler.isInline === false &&\n                        options.breakEndBlock &&\n                        parentHandler.breakEnd !== false\n                    ) {\n                        remove = true;\n                    }\n\n                    if (parentHandler.breakEnd) {\n                        remove = true;\n                    }\n\n                    removedBreakEnd = remove;\n                }\n            }\n\n            if (\n                left &&\n                left.type === TokenType.OPEN\n            ) {\n                handler = context.handlers.get(left.name);\n\n                if (handler) {\n                    if (!onlyRemoveBreakAfter) {\n                        if (handler.isInline === false &&\n                            options.breakAfterBlock &&\n                            handler.breakAfter !== false) {\n                            remove = true;\n                        }\n\n                        if (handler.breakAfter) {\n                            remove = true;\n                        }\n                    } else if (handler.isInline === false) {\n                        remove = true;\n                    }\n                }\n            }\n\n            if (\n                !onlyRemoveBreakAfter &&\n                !removedBreakBefore &&\n                right &&\n                right.type === TokenType.OPEN\n            ) {\n                handler = context.handlers.get(right.name);\n                if (handler) {\n                    if (\n                        handler.isInline === false &&\n                        options.breakBeforeBlock &&\n                        handler.breakBefore !== false\n                    ) {\n                        remove = true;\n                    }\n\n                    if (handler.breakBefore) {\n                        remove = true;\n                    }\n\n                    removedBreakBefore = remove;\n\n                    if (remove) {\n                        children.splice(i, 1);\n                        // eslint-disable-next-line no-continue\n                        continue;\n                    }\n                }\n            }\n\n            if (remove) {\n                children.splice(i, 1);\n            }\n\n            // reset double removedBreakBefore removal protection.\n            // This is needed for cases like \\n\\n[\\tag] where\n            // only 1 \\n should be removed but without this they both\n            // would be.\n            removedBreakBefore = false;\n        } else if (token.type === TokenType.OPEN) {\n            normalizeTokenNewLines({\n                handlers: context.handlers,\n                children: token.children,\n                parent: token,\n                options,\n                onlyRemoveBreakAfter,\n            });\n        }\n    }\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Token } from '../../token';\nimport { TokenType } from '../../token';\nimport type { Handler } from '../../handler';\nimport { escapeCharacters, formatString } from '../../utils';\nimport type { BBCodeToHTMLConvertContext } from '../type';\n\nexport function convertBBCodeToHTML(context: BBCodeToHTMLConvertContext) {\n    let bbcode : Handler | undefined;\n    let content : string;\n    let html : string;\n    let ret = '';\n\n    const isInline = (handler: Handler) : boolean => typeof handler === 'undefined' || (\n        typeof handler.isHtmlInline !== 'undefined' ?\n            handler.isHtmlInline :\n            handler.isInline\n    ) !== false;\n\n    while (context.tokens.length > 0) {\n        const token = context.tokens.shift();\n        if (!token) {\n            // eslint-disable-next-line no-continue\n            continue;\n        }\n\n        html = '';\n\n        switch (token.type) {\n            case TokenType.OPEN: {\n                const lastChild = token.children[token.children.length - 1] || {} as Token;\n\n                bbcode = context.handlers.get(token.name);\n                content = convertBBCodeToHTML({\n                    tokens: [...token.children],\n                    options: {\n                        ...context.options,\n                        isRoot: false,\n                    },\n                    handlers: context.handlers,\n                });\n\n                if (bbcode && bbcode.html) {\n                    const lastChildHandler = context.handlers.get(lastChild.name);\n                    // Only add a line break to the end if this is\n                    // blocklevel and the last child wasn't block-level\n                    if (\n                        lastChildHandler &&\n                        !isInline(bbcode) &&\n                        isInline(lastChildHandler) &&\n                        !bbcode.skipLastLineBreak\n                    ) {\n                        // Add placeholder br to end of block level\n                        // elements\n                        content += '<br />';\n                    }\n\n                    if (typeof bbcode.html !== 'function') {\n                        token.attrs['0'] = content;\n                        html = formatString(\n                            bbcode.html,\n                            token.attrs,\n                        );\n                    } else {\n                        html = bbcode.html({\n                            handlers: context.handlers,\n                            token,\n                            attributes: token.attrs,\n                            content,\n                            options: context.options,\n                        });\n                    }\n                } else if (!context.options.lazy) {\n                    html = token.value + content + (token.closing ? token.closing.value : '');\n                }\n                break;\n            }\n            /* istanbul ignore next */\n            case TokenType.NEWLINE: {\n                if (!context.options.isRoot) {\n                    ret += '<br />';\n                    // eslint-disable-next-line no-continue\n                    continue;\n                }\n\n                ret += '<br />';\n\n                // Normally the div acts as a line-break with by moving\n                // whatever comes after onto a new line.\n                // If this is the last token, add an extra line-break so it\n                // shows as there will be nothing after it.\n                if (!context.tokens.length) {\n                    ret += '<br />';\n                }\n\n                ret += '</div>\\n';\n                continue;\n            }\n            default: {\n                html = escapeCharacters(token.value, true);\n                break;\n            }\n        }\n\n        ret += html;\n    }\n\n    return ret;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Token } from '../../token';\nimport { TokenType } from '../../token';\nimport type { Handler } from '../../handler';\nimport { findHandlerForHTMLToken } from '../../handler/utils';\nimport { escapeCharacters, formatString } from '../../utils';\nimport type { HTMLToBBCodeConvertContext } from '../type';\n\nexport function convertHTMLToBBCode(context: HTMLToBBCodeConvertContext) {\n    context.options = context.options || {};\n\n    let output = '';\n\n    const isInline = (handler: Handler) : boolean => typeof handler === 'undefined' || (\n        typeof handler.isHtmlInline !== 'undefined' ?\n            handler.isHtmlInline :\n            handler.isInline\n    ) !== false;\n\n    while (context.tokens.length > 0) {\n        const token = context.tokens.shift();\n        if (!token) {\n            // eslint-disable-next-line no-continue\n            continue;\n        }\n\n        switch (token.type) {\n            case TokenType.OPEN: {\n                const lastChild : Token | undefined = token.children[token.children.length - 1];\n\n                const handler = findHandlerForHTMLToken(context.handlers, token);\n                let content = convertHTMLToBBCode({\n                    tokens: [...token.children],\n                    options: {\n                        ...context.options,\n                        isRoot: false,\n                    },\n                    handlers: context.handlers,\n                });\n\n                if (handler && handler.bbcode) {\n                    const lastChildHandler = findHandlerForHTMLToken(context.handlers, lastChild);\n                    if (\n                        lastChildHandler &&\n                        !isInline(handler) &&\n                        isInline(lastChildHandler) &&\n                        !handler.skipLastLineBreak\n                    ) {\n                        // Add placeholder br to end of block level\n                        // elements\n                        content += '\\n';\n                    }\n\n                    if (typeof handler.bbcode !== 'function') {\n                        token.attrs['0'] = content;\n                        output += formatString(handler.bbcode, token.attrs);\n                    } else {\n                        output += handler.bbcode({\n                            handlers: context.handlers,\n                            token,\n                            attributes: token.attrs,\n                            content,\n                            options: context.options,\n                        });\n                    }\n                } else if (!context.options.lazy) {\n                    output += token.value + content + (token.closing ? token.closing.value : '');\n                }\n                break;\n            }\n            /* istanbul ignore next */\n            case TokenType.NEWLINE: {\n                if (!context.options.isRoot) {\n                    output += '\\n';\n                    // eslint-disable-next-line no-continue\n                    continue;\n                }\n\n                output += '\\n';\n\n                if (!context.tokens.length) {\n                    output += '\\n';\n                }\n\n                break;\n            }\n            default: {\n                output += escapeCharacters(token.value, true);\n                break;\n            }\n        }\n    }\n\n    return output;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Handler } from './type';\nimport { QuoteType } from '../constants';\nimport {\n    normaliseColor,\n    stripQuotes,\n} from './utils';\nimport { escapeCharacters, escapeUriScheme, getObjectPathValue } from '../utils';\nimport { convertHTMLToBBCode } from '../converter';\n\n/* istanbul ignore next */\nexport const HandlerPreset : Record<string, Handler> = {\n    h1: {\n        conditions: [{ tag: 'h1' }],\n        bbcode: '[h1]{0}[/h1]',\n        html: '<h1>{0}</h1>',\n    },\n    h2: {\n        conditions: [{ tag: 'h2' }],\n        bbcode: '[h2]{0}[/h2]',\n        html: '<h2>{0}</h2>',\n    },\n    h3: {\n        conditions: [{ tag: 'h3' }],\n        bbcode: '[h3]{0}[/h3]',\n        html: '<h3>{0}</h3>',\n    },\n    h4: {\n        conditions: [{ tag: 'h4' }],\n        bbcode: '[h4]{0}[/h4]',\n        html: '<h4>{0}</h4>',\n    },\n    h5: {\n        conditions: [{ tag: 'h5' }],\n        bbcode: '[h5]{0}[/h5]',\n        html: '<h5>{0}</h5>',\n    },\n    h6: {\n        conditions: [{ tag: 'h6' }],\n        bbcode: '[h6]{0}[/h6]',\n        html: '<h6>{0}</h6>',\n    },\n    // START_COMMAND: Bold\n    b: {\n        conditions: [\n            { tag: 'b' },\n            { tag: 'strong' },\n            {\n                attribute: {\n                    style: {\n                        fontWeight: ['bold', 'bolder', '401', '700', '800', '900'],\n                    },\n                },\n            },\n        ],\n        bbcode: '[b]{0}[/b]',\n        html: '<strong>{0}</strong>',\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Italic\n    i: {\n        conditions: [\n            { tag: 'i' },\n            { tag: 'em' },\n            {\n                attribute: {\n                    style: {\n                        textDecoration: ['italic', 'oblique'],\n                    },\n                },\n            },\n        ],\n        bbcode: '[i]{0}[/i]',\n        html: '<em>{0}</em>',\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Underline\n    u: {\n        conditions: [\n            { tag: 'u' },\n            {\n                attribute: {\n                    style: {\n                        textDecoration: ['underline'],\n                    },\n                },\n            },\n        ],\n        bbcode: '[u]{0}[/u]',\n        html: '<u>{0}</u>',\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Strikethrough\n    s: {\n        conditions: [\n            { tag: 's' },\n            { tag: 'strike' },\n            {\n                attribute: {\n                    style: {\n                        textDecoration: ['line-through'],\n                    },\n                },\n            },\n        ],\n        bbcode: '[s]{0}[/s]',\n        html: '<s>{0}</s>',\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Subscript\n    sub: {\n        conditions: [\n            { tag: 'sub' },\n        ],\n        bbcode: '[sub]{0}[/sub]',\n        html: '<sub>{0}</sub>',\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Superscript\n    sup: {\n        conditions: [\n            { tag: 'sup' },\n        ],\n        bbcode: '[sup]{0}[/sup]',\n        html: '<sup>{0}</sup>',\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Font\n    font: {\n        conditions: [\n            {\n                attribute: {\n                    style: {\n                        fontFamily: null,\n                    },\n                },\n            },\n        ],\n        quoteType: QuoteType.never,\n        bbcode(context) {\n            const font = getObjectPathValue(context.attributes, 'style.fontFamily');\n            if (!font) {\n                return '';\n            }\n            return `[font=${stripQuotes(font)}]${context.content}[/font]`;\n        },\n        html: '<span style=\"font-family: {default}\">{0}</span>',\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Size\n    size: {\n        conditions: [\n            {\n                attribute: {\n                    style: {\n                        fontSize: null,\n                    },\n                },\n            },\n        ],\n        bbcode(context) {\n            let fontSize : unknown = getObjectPathValue(context.attributes, 'size');\n\n            if (!fontSize) {\n                fontSize = getObjectPathValue(context.attributes, 'style.fontSize');\n            }\n\n            return `[size=${fontSize}]${context.content}[/size]`;\n        },\n        html: '<span style=\"font-size: {default}\">{!0}</span>',\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Color\n    color: {\n        conditions: [\n            {\n                attribute: {\n                    style: {\n                        color: null,\n                    },\n                },\n            },\n        ],\n        quoteType: QuoteType.never,\n        bbcode(context) {\n            let color = getObjectPathValue(context.attributes, 'color');\n\n            if (!color) {\n                color = getObjectPathValue(context.attributes, 'style.color');\n            }\n\n            if (!color) {\n                return '';\n            }\n\n            return `[color=${normaliseColor(color)}]${context.content}[/color]`;\n        },\n        html(context) {\n            if (!context.attributes.default) {\n                return '';\n            }\n\n            return `<span style=\"color: ${escapeCharacters(normaliseColor(context.attributes.default), true)}\">${context.content}</span>`;\n        },\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Lists\n    ul: {\n        conditions: [\n            { tag: 'ul' },\n        ],\n        breakStart: true,\n        isInline: false,\n        skipLastLineBreak: true,\n        bbcode: '[ul]{0}[/ul]',\n        html: '<ul>{0}</ul>',\n    },\n    list: {\n        breakStart: true,\n        isInline: false,\n        skipLastLineBreak: true,\n        html: '<ul>{0}</ul>',\n    },\n    ol: {\n        conditions: [\n            { tag: 'ol' },\n        ],\n        breakStart: true,\n        isInline: false,\n        skipLastLineBreak: true,\n        bbcode: '[ol]{0}[/ol]',\n        html: '<ol>{0}</ol>',\n    },\n    li: {\n        conditions: [\n            { tag: 'li' },\n        ],\n        isInline: true,\n        closedBy: ['/ul', '/ol', '/list', '*', 'li'],\n        bbcode: '[li]{0}[/li]',\n        html: '<li>{0}</li>',\n    },\n    '*': {\n        isInline: false,\n        closedBy: ['/ul', '/ol', '/list', '*', 'li'],\n        html: '<li>{0}</li>',\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Table\n    table: {\n        conditions: [\n            { tag: 'table' },\n        ],\n        isInline: false,\n        isHtmlInline: true,\n        skipLastLineBreak: true,\n        bbcode: '[table]{0}[/table]',\n        html: '<table>{0}</table>',\n    },\n    tr: {\n        conditions: [\n            { tag: 'tr' },\n        ],\n        isInline: false,\n        skipLastLineBreak: true,\n        bbcode: '[tr]{0}[/tr]',\n        html: '<tr>{0}</tr>',\n    },\n    th: {\n        conditions: [\n            { tag: 'th' },\n        ],\n        allowsEmpty: true,\n        isInline: false,\n        bbcode: '[th]{0}[/th]',\n        html: '<th>{0}</th>',\n    },\n    td: {\n        conditions: [\n            { tag: 'td' },\n        ],\n        allowsEmpty: true,\n        isInline: false,\n        bbcode: '[td]{0}[/td]',\n        html: '<td>{0}</td>',\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Emoticons\n    // END_COMMAND\n\n    // START_COMMAND: Horizontal Rule\n    hr: {\n        conditions: [\n            { tag: 'hr' },\n        ],\n        allowsEmpty: true,\n        isSelfClosing: true,\n        isInline: false,\n        bbcode: '[hr]{0}',\n        html: '<hr />',\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Image\n    img: {\n        allowsEmpty: true,\n        conditions: [\n            { tag: 'img', attribute: { src: null } },\n        ],\n        allowedChildren: ['#'],\n        quoteType: QuoteType.never,\n        bbcode(context) {\n            let attribs = '';\n\n            const width = getObjectPathValue(context.attributes, 'width') || getObjectPathValue(context.attributes, 'style.width');\n            const height = getObjectPathValue(context.attributes, 'height') || getObjectPathValue(context.attributes, 'style.height');\n\n            // only add width and height if one is specified\n            if (width && height) {\n                attribs = `=${width}x${height}`;\n            }\n\n            return `[img${attribs}]${getObjectPathValue(context.attributes, 'src')}[/img]`;\n        },\n        html(context) {\n            let width : string;\n            let height : string;\n            let match;\n            let attribs = '';\n\n            // handle [img width=340 height=240]url[/img]\n            width = context.attributes.width;\n            height = context.attributes.height;\n\n            // handle [img=340x240]url[/img]\n            if (context.attributes.default) {\n                match = context.attributes.default.split(/x/i);\n\n                // eslint-disable-next-line prefer-destructuring\n                width = match[0];\n                height = (match.length === 2 ? match[1] : match[0]);\n            }\n\n            if (typeof width !== 'undefined') {\n                attribs += ` width=\"${escapeCharacters(width, true)}\"`;\n            }\n\n            if (typeof height !== 'undefined') {\n                attribs += ` height=\"${escapeCharacters(height, true)}\"`;\n            }\n\n            return `<img${attribs} src=\"${escapeUriScheme(context.content)}\" />`;\n        },\n    },\n    // END_COMMAND\n\n    // START_COMMAND: URL\n    url: {\n        allowsEmpty: true,\n        conditions: [\n            { tag: 'a', attribute: { href: null } },\n        ],\n        quoteType: QuoteType.never,\n        bbcode(context) {\n            const url = getObjectPathValue(context.attributes, 'href');\n\n            // make sure this link is not an e-mail,\n            // if it is return e-mail BBCode\n            if (url && url.substring(0, 7) === 'mailto:') {\n                return `[email=${url.substring(7)}]${context.content}[/email]`;\n            }\n\n            return `[url=${url}]${context.content}[/url]`;\n        },\n        html(context) {\n            context.attributes.default = context.attributes.default ? escapeCharacters(context.attributes.default, true) : context.content;\n\n            return `<a href=\"${escapeUriScheme(context.attributes.default)}\">${context.content}</a>`;\n        },\n    },\n    // END_COMMAND\n\n    // START_COMMAND: E-mail\n    email: {\n        quoteType: QuoteType.never,\n        html(context) {\n            return `<a href=\"mailto:${context.attributes.default ? escapeCharacters(context.attributes.default, true) : context.content}\">${context.content}</a>`;\n        },\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Quote\n    quote: {\n        conditions: [\n            { tag: 'blockquote' },\n        ],\n        isInline: false,\n        quoteType: QuoteType.never,\n        bbcode(context) {\n            const authorAttr = 'data-author';\n            let author = getObjectPathValue(context.attributes, authorAttr);\n            if (!author) {\n                let index = -1;\n\n                for (let i = 0; i < context.token.children.length; i++) {\n                    if (context.token.children[i].name.toLowerCase() === 'cite') {\n                        index = i;\n                    }\n                }\n\n                if (index > -1) {\n                    const citeChild = context.token.children[index].children[0];\n                    if (citeChild) {\n                        author = citeChild.value.replace(/(^\\s+|\\s+$)/g, '');\n\n                        context.token.children.splice(index, 1);\n                        context.content = convertHTMLToBBCode({\n                            tokens: context.token.children,\n                            options: context.options,\n                            handlers: context.handlers,\n                        });\n                    }\n                }\n            }\n\n            return `[quote${(author ? `=${author}` : '')}]${context.content}[/quote]`;\n        },\n        html(context) {\n            if (context.attributes.default) {\n                context.content = `<cite>${escapeCharacters(context.attributes.default)}</cite>${context.content}`;\n            }\n\n            return `<blockquote>${context.content}</blockquote>`;\n        },\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Code\n    code: {\n        conditions: [\n            { tag: 'code' },\n        ],\n        isInline: false,\n        allowedChildren: ['#', '#newline'],\n        bbcode: '[code]{0}[/code]',\n        html: '<code>{0}</code>',\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Left\n    left: {\n        conditions: [\n            {\n                attribute: {\n                    style: {\n                        textAlign: [\n                            'left',\n                            '-webkit-left',\n                            '-moz-left',\n                            '-khtml-left',\n                        ],\n                    },\n                },\n            },\n        ],\n        isInline: false,\n        allowsEmpty: true,\n        bbcode: '[left]{0}[/left]',\n        html: '<div style=\"text-align: left\">{0}</div>',\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Centre\n    center: {\n        conditions: [\n            {\n                attribute: {\n                    style: {\n                        textAlign: [\n                            'center',\n                            '-webkit-center',\n                            '-moz-center',\n                            '-khtml-center',\n                        ],\n                    },\n                },\n            },\n        ],\n        isInline: false,\n        allowsEmpty: true,\n        bbcode: '[center]{0}[/center]',\n        html: '<div style=\"text-align: center\">{0}</div>',\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Right\n    right: {\n        conditions: [\n            {\n                attribute: {\n                    style: {\n                        textAlign: [\n                            'right',\n                            '-webkit-right',\n                            '-moz-right',\n                            '-khtml-right',\n                        ],\n                    },\n                },\n            },\n        ],\n        isInline: false,\n        allowsEmpty: true,\n        bbcode: '[right]{0}[/right]',\n        html: '<div style=\"text-align: right\">{0}</div>',\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Justify\n    justify: {\n        conditions: [\n            {\n                attribute: {\n                    style: {\n                        textAlign: [\n                            'justify',\n                            '-webkit-justify',\n                            '-moz-justify',\n                            '-khtml-justify',\n                        ],\n                    },\n                },\n            },\n        ],\n        isInline: false,\n        allowsEmpty: true,\n        bbcode: '[justify]{0}[/justify]',\n        html: '<div style=\"text-align: justify\">{0}</div>',\n    },\n    // END_COMMAND\n\n    // START_COMMAND: YouTube\n    youtube: {\n        allowsEmpty: true,\n        conditions: [\n            { tag: 'iframe', attribute: { 'data-youtube-id': null } },\n        ],\n        bbcode(context) {\n            const value = getObjectPathValue(context.attributes, 'data-youtube-id');\n\n            return value ? `[youtube]${value}[/youtube]` : '';\n        },\n        html: '<iframe width=\"560\" height=\"315\" ' +\n            'src=\"https://www.youtube-nocookie.com/embed/{0}?wmode=opaque\" ' +\n            'data-youtube-id=\"{0}\" allowfullscreen></iframe>',\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Rtl\n    rtl: {\n        conditions: [\n            {\n                attribute: {\n                    style: {\n                        direction: ['rtl'],\n                    },\n                },\n            },\n        ],\n        isInline: false,\n        bbcode: '[rtl]{0}[/rtl]',\n        html: '<div style=\"direction: rtl\">{0}</div>',\n    },\n    // END_COMMAND\n\n    // START_COMMAND: Ltr\n    ltr: {\n        conditions: [\n            {\n                attribute: {\n                    style: {\n                        direction: ['ltr'],\n                    },\n                },\n            },\n        ],\n        isInline: false,\n        bbcode: '[ltr]{0}[/ltr]',\n        html: '<div style=\"direction: ltr\">{0}</div>',\n    },\n    // END_COMMAND\n};\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '../utils';\nimport { HandlerPreset } from './constants';\nimport type { Handler } from './type';\nimport { extendHandler } from './utils';\n\nexport class Handlers {\n    protected items : Record<string, Handler>;\n\n    constructor(items?: Record<string, Handler>) {\n        this.items = {};\n\n        this.init();\n        if (items) {\n            this.set(items);\n        }\n    }\n\n    protected init() {\n        const keys = Object.keys(HandlerPreset);\n        for (let i = 0; i < keys.length; i++) {\n            this.items[keys[i]] = extendHandler(HandlerPreset[keys[i]]);\n        }\n    }\n\n    get() : Record<string, Handler>;\n\n    get(id: string) : Handler | undefined;\n\n    get(id?: string) : any {\n        if (typeof id === 'string') {\n            return this.items[id];\n        }\n\n        return this.items;\n    }\n\n    set(items: Record<string, Handler>) : void;\n\n    set(id: string, handler: Handler) : void;\n\n    set(id: string | Record<string, Handler>, handler?: Handler) : void {\n        if (isObject(id)) {\n            const keys = Object.keys(id);\n            for (let i = 0; i < keys.length; i++) {\n                this.set(keys[i], id[keys[i]]);\n            }\n            return;\n        }\n\n        if (typeof handler !== 'undefined') {\n            this.items[id] = extendHandler(handler);\n        }\n    }\n\n    unset(id: string | string[]) {\n        const keys = Array.isArray(id) ? id : [id];\n        for (let i = 0; i < keys.length; i++) {\n            delete this.items[keys[i]];\n        }\n    }\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ParserOptions } from './type';\nimport { QuoteType } from '../constants';\n\nexport const ParserDefaultOptions : ParserOptions = {\n    /**\n     * Add a set of handlers to the already predefined ones.\n     *\n     * @type {Object}\n     */\n    handlers: {},\n\n    /**\n     * If to add a new line before block level elements\n     *\n     * @type {Boolean}\n     */\n    breakBeforeBlock: false,\n\n    /**\n     * If to add a new line after the start of block level elements\n     *\n     * @type {Boolean}\n     */\n    breakStartBlock: false,\n\n    /**\n     * If to add a new line before the end of block level elements\n     *\n     * @type {Boolean}\n     */\n    breakEndBlock: false,\n\n    /**\n     * If to add a new line after block level elements\n     *\n     * @type {Boolean}\n     */\n    breakAfterBlock: true,\n\n    /**\n     * If to remove empty tags\n     *\n     * @type {Boolean}\n     */\n    removeEmptyTags: true,\n\n    /**\n     * If to fix invalid nesting,\n     * i.e. block level elements inside inline elements.\n     *\n     * @type {Boolean}\n     */\n    fixInvalidNesting: true,\n\n    /**\n     * If to fix invalid children.\n     * i.e. A tag which is inside a parent that doesn't\n     * allow that type of tag.\n     *\n     * @type {Boolean}\n     */\n    fixInvalidChildren: true,\n\n    /**\n     * Attribute quote type\n     */\n    quoteType: QuoteType.auto,\n\n    /**\n     * Strict handler match.\n     * Otherwise, library will attempt to construct html or bbcode without handler.\n     */\n    lazyTransformation: true,\n};\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { TokenType } from '../../token';\nimport type { BBCodeCleanupContext } from '../type';\nimport { QuoteType } from '../../constants';\nimport type { Handler } from '../../handler';\n\nfunction quote(str: string, quoteType: `${QuoteType}` | ((str: string, name: string) => string), name: string) {\n    const needsQuotes = /\\s|=/.test(str);\n\n    if (typeof quoteType === 'function') {\n        return quoteType(str, name);\n    }\n\n    if (quoteType === QuoteType.never || (quoteType === QuoteType.auto && !needsQuotes)) {\n        return str;\n    }\n\n    return `\"${str.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`;\n}\n\nexport function cleanupBBCode(context: BBCodeCleanupContext) {\n    let bbcode : Handler | undefined;\n\n    let isBlock : boolean;\n    let isSelfClosing : boolean;\n    let breakBefore : boolean;\n    let breakStart : boolean;\n    let breakEnd : boolean;\n    let breakAfter : boolean;\n\n    let quoteType : `${QuoteType}`;\n\n    let ret = '';\n\n    while (context.tokens.length > 0) {\n        const token = context.tokens.shift();\n        // eslint-disable-next-line no-cond-assign\n        if (!token) {\n            // eslint-disable-next-line no-continue\n            continue;\n        }\n\n        bbcode = context.handlers.get(token.name);\n        if (bbcode) {\n            isBlock = !(typeof bbcode.isHtmlInline !== 'undefined' ? bbcode.isHtmlInline : bbcode.isInline);\n            isSelfClosing = !!bbcode.isSelfClosing;\n\n            breakBefore = (isBlock && context.options.breakBeforeBlock && bbcode.breakBefore !== false) || !!bbcode.breakBefore;\n            breakStart = (isBlock && !isSelfClosing && context.options.breakStartBlock && bbcode.breakStart !== false) || !!bbcode.breakStart;\n            breakEnd = (isBlock && context.options.breakEndBlock && bbcode.breakEnd !== false) || !!bbcode.breakEnd;\n            breakAfter = (isBlock && context.options.breakAfterBlock && bbcode.breakAfter !== false) || !!bbcode.breakAfter;\n        } else {\n            isBlock = false;\n            isSelfClosing = false;\n\n            breakBefore = false;\n            breakStart = false;\n            breakEnd = false;\n            breakAfter = false;\n        }\n\n        quoteType = bbcode?.quoteType || context.options.quoteType || QuoteType.auto;\n\n        if (!bbcode && token.type === TokenType.OPEN) {\n            ret += token.value;\n\n            if (token.children) {\n                ret += cleanupBBCode({ tokens: token.children, options: context.options, handlers: context.handlers });\n            }\n\n            if (token.closing) {\n                ret += token.closing.value;\n            }\n        } else if (token.type === TokenType.OPEN) {\n            if (breakBefore) {\n                ret += '\\n';\n            }\n\n            // Convert the tag and it's attributes to BBCode\n            ret += `[${token.name}`;\n            if (token.attrs) {\n                if (token.attrs.default) {\n                    ret += `=${quote(token.attrs.default, quoteType, 'default')}`;\n\n                    delete token.attrs.default;\n                }\n\n                const keys = Object.keys(token.attrs);\n                for (let i = 0; i < keys.length; i++) {\n                    if (Object.prototype.hasOwnProperty.call(token.attrs, keys[i])) {\n                        ret += ` ${keys[i]}=${quote(token.attrs[keys[i]], quoteType, keys[i])}`;\n                    }\n                }\n            }\n            ret += ']';\n\n            if (breakStart) {\n                ret += '\\n';\n            }\n\n            // Convert the tags children to BBCode\n            if (token.children) {\n                ret += cleanupBBCode({ tokens: token.children, options: context.options, handlers: context.handlers });\n            }\n\n            // add closing tag if not self-closing\n            if (!isSelfClosing && (bbcode && !bbcode.excludeClosing)) {\n                if (breakEnd) {\n                    ret += '\\n';\n                }\n\n                ret += `[/${token.name}]`;\n            }\n\n            if (breakAfter) {\n                ret += '\\n';\n            }\n\n            // preserve whatever was recognized as the\n            // closing tag if it is a self-closing tag\n            if (token.closing && isSelfClosing) {\n                ret += token.closing.value;\n            }\n        } else {\n            ret += token.value;\n        }\n    }\n\n    return ret;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Handler } from '../handler';\nimport { Handlers } from '../handler';\nimport type { Token } from '../token';\nimport {\n    fixNestingTokens,\n    normalizeTokenNewLines,\n    parseTokens,\n    removeEmptyTokens,\n    tokenizeBBCode, tokenizeHTML,\n} from '../token';\nimport { isObject } from '../utils';\nimport type { ParserInterface, ParserOptions } from './type';\nimport { cleanupBBCode } from './utils';\nimport { ParserDefaultOptions } from './constants';\nimport { convertBBCodeToHTML, convertHTMLToBBCode } from '../converter';\n\nexport class Parser implements ParserInterface {\n    protected options: ParserOptions;\n\n    protected handlers : Handlers;\n\n    // --------------------------------------------------\n\n    constructor(options?: Partial<ParserOptions>) {\n        this.options = { ...ParserDefaultOptions, ...(options || {}) };\n        this.handlers = new Handlers(this.options.handlers);\n    }\n\n    // --------------------------------------------------\n\n    setHandler(items: Record<string, Handler>) : void;\n\n    setHandler(id: string, handler: Handler) : void;\n\n    setHandler(id: string | Record<string, Handler>, handler?: Handler) : void {\n        if (typeof id === 'string' && typeof handler !== 'undefined') {\n            this.handlers.set(id, handler);\n        }\n\n        if (isObject(id)) {\n            this.handlers.set(id);\n        }\n    }\n\n    unsetHandler(id: string | string[]) {\n        this.handlers.unset(id);\n    }\n\n    // --------------------------------------------------\n\n    /**\n     * Tokenize bbcode input string.\n     *\n     * @param input\n     * @param preserveNewLines\n     */\n    parseBBCode(input: string, preserveNewLines?: boolean) : Token[] {\n        const tokens = parseTokens({\n            handlers: this.handlers,\n            items: tokenizeBBCode(input, this.handlers),\n            fixInvalidChildren: this.options.fixInvalidChildren,\n        });\n\n        if (this.options.fixInvalidNesting) {\n            fixNestingTokens({\n                handlers: this.handlers,\n                children: tokens,\n                fixInvalidChildren: this.options.fixInvalidChildren,\n            });\n        }\n\n        normalizeTokenNewLines({\n            handlers: this.handlers,\n            children: tokens,\n            parent: undefined,\n            options: this.options,\n            onlyRemoveBreakAfter: preserveNewLines,\n        });\n\n        if (this.options.removeEmptyTags) {\n            removeEmptyTokens(tokens, this.handlers);\n        }\n\n        return tokens;\n    }\n\n    /**\n     * Tokenize html input string.\n     *\n     * @param input\n     */\n    parseHTML(input: string) {\n        return tokenizeHTML(input);\n    }\n\n    // ----------------------------------------------------------\n\n    /**\n     * Convert a bbcode string to a html string.\n     *\n     * @param input\n     * @param preserveNewLines\n     */\n    toHTML(input: string, preserveNewLines?: boolean) : string {\n        return convertBBCodeToHTML({\n            tokens: this.parseBBCode(input, preserveNewLines),\n            options: {\n                isRoot: true,\n                lazy: this.options.lazyTransformation,\n            },\n            handlers: this.handlers,\n        });\n    }\n\n    /**\n     * Alias for toHTML.\n     *\n     * @alias toHTML\n     * @param input\n     * @param preserveNewLines\n     */\n    fromBBCode(input: string, preserveNewLines?: boolean) : string {\n        return this.toHTML(input, preserveNewLines);\n    }\n\n    // ----------------------------------------------------------\n\n    /**\n     * Clean up bbcode ( remove unnecessary ident, ... )\n     *\n     * @param input\n     * @param preserveNewLines\n     */\n    cleanupBBCode(input: string, preserveNewLines?: boolean) : string {\n        return cleanupBBCode({\n            tokens: this.parseBBCode(input, preserveNewLines),\n            options: this.options,\n            handlers: this.handlers,\n        });\n    }\n\n    // ----------------------------------------------------------\n\n    /**\n     * Convert a html string to a bbcode string.\n     *\n     * @param input\n     * @param _preserveNewLines\n     */\n    toBBCode(input: string, _preserveNewLines?: boolean) : string {\n        return convertHTMLToBBCode({\n            tokens: this.parseHTML(input),\n            options: {\n                isRoot: true,\n                lazy: this.options.lazyTransformation,\n            },\n            handlers: this.handlers,\n        });\n    }\n\n    /**\n     * Alias for toBBCode.\n     *\n     * @alias toBBCode\n     * @param input\n     */\n    fromHTML(input: string) {\n        return this.toBBCode(input);\n    }\n}\n"],"names":["QuoteType","toHex","input","number","parseInt","Number","isNaN","Math","max","min","toString","length","normaliseColor","match","stripQuotes","str","replace","extendHandler","handler","isSelfClosing","isInline","allowsEmpty","excludeClosing","skipLastLineBreak","strictMatch","breakBefore","breakStart","breakEnd","breakAfter","lastArrayElement","arr","undefined","escapeCharacters","noQuotes","replacements","VALID_SCHEME_REGEX","escapeUriScheme","url","path","hasScheme","test","window","location","pathname","split","pop","protocol","host","join","hasOwnProperty","obj","prop","Object","prototype","call","getObjectPathValue","data","key","index","indexOf","currentKey","substring","isObject","nextKey","item","Array","isArray","formatString","group","escape","charAt","isMatch","one","two","some","trim","keys","i","isHTMLConditionMatch","condition","token","tag","attribute","name","toLowerCase","attrs","isHandlerMatch","conditions","findHandlerForHTMLToken","handlers","items","get","TokenType","Token","clone","type","value","closing","splitAt","offsetLength","offset","children","splice","constructor","attrRegex","tokenizeAttrs","matches","ret","default","exec","tokenizeTag","handlerManager","OPEN","CLOSE","NEWLINE","CONTENT","tokenizeBBCode","tokenTypes","regex","tokens","inputLoop","push","parseStyles","filter","style","map","c","toUpperCase","reduce","styleObj","selfClosingTags","parseNode","node","nodeType","NodeType","ELEMENT_NODE","element","rawTagName","childNodes","closingToken","tagName","class","from","classList","values","TEXT_NODE","text","COMMENT_NODE","tokenizeHTML","htmlElement","parse","removeEmptyTokens","bbcode","isTokenWhiteSpace","j","hasToken","isChildAllowed","context","parentBBCode","parent","fixInvalidChildren","allowedChildren","child","parseTokens","curTok","next","cloned","output","openTags","currentTag","addTag","curr","closesCurrentTag","closedBy","shift","lastElement","fixNestingTokens","parents","rootArr","parentIndex","parentParentChildren","right","insideInlineElement","normalizeTokenNewLines","options","onlyRemoveBreakAfter","childrenLength","left","parentHandler","removedBreakEnd","removedBreakBefore","remove","breakStartBlock","breakEndBlock","breakAfterBlock","breakBeforeBlock","convertBBCodeToHTML","content","html","isHtmlInline","lastChild","isRoot","lastChildHandler","attributes","lazy","convertHTMLToBBCode","HandlerPreset","h1","h2","h3","h4","h5","h6","b","fontWeight","textDecoration","u","s","sub","sup","font","fontFamily","quoteType","never","size","fontSize","color","ul","list","ol","li","table","tr","th","td","hr","img","src","attribs","width","height","href","email","quote","authorAttr","author","citeChild","code","textAlign","center","justify","youtube","rtl","direction","ltr","Handlers","init","id","set","unset","ParserDefaultOptions","removeEmptyTags","fixInvalidNesting","auto","lazyTransformation","needsQuotes","cleanupBBCode","isBlock","Parser","setHandler","unsetHandler","parseBBCode","preserveNewLines","parseHTML","toHTML","fromBBCode","toBBCode","_preserveNewLines","fromHTML"],"mappings":"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"}