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
}