function formatCopyText()

in src/Elastic.Markdown/Assets/copybutton.ts [168:229]


    function formatCopyText(
        textContent,
        copybuttonPromptText,
        isRegexp = false,
        onlyCopyPromptLines = true,
        removePrompts = true,
        copyEmptyLines = true,
        lineContinuationChar = '',
        hereDocDelim = ''
    ) {
        let regexp
        let match

        // Do we check for line continuation characters and "HERE-documents"?
        const useLineCont = !!lineContinuationChar
        const useHereDoc = !!hereDocDelim

        // create regexp to capture prompt and remaining line
        if (isRegexp) {
            regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)')
        } else {
            regexp = new RegExp(
                '^(' + escapeRegExp(copybuttonPromptText) + ')(.*)'
            )
        }

        const outputLines = []
        let promptFound = false
        let gotLineCont = false
        let gotHereDoc = false
        const lineGotPrompt = []
        for (const line of textContent.split('\n')) {
            match = line.match(regexp)
            if (match || gotLineCont || gotHereDoc) {
                promptFound = regexp.test(line)
                lineGotPrompt.push(promptFound)
                if (removePrompts && promptFound) {
                    outputLines.push(match[2])
                } else {
                    outputLines.push(line)
                }
                gotLineCont = line.endsWith(lineContinuationChar) && useLineCont
                if (line.includes(hereDocDelim) && useHereDoc)
                    gotHereDoc = !gotHereDoc
            } else if (!onlyCopyPromptLines) {
                outputLines.push(line)
            } else if (copyEmptyLines && line.trim() === '') {
                outputLines.push(line)
            }
        }

        // If no lines with the prompt were found then just use original lines
        if (lineGotPrompt.some((v) => v === true)) {
            textContent = outputLines.join('\n')
        }

        // Remove a trailing newline to avoid auto-running when pasting
        if (textContent.endsWith('\n')) {
            textContent = textContent.slice(0, -1)
        }
        return textContent
    }