1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- function escapeRegExp(string) {
- return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
- }
- // Callback when a copy button is clicked. Will be passed the node that was clicked
- // should then grab the text and replace pieces of text that shouldn't be used in output
- export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") {
- var regexp;
- var match;
- // Do we check for line continuation characters and "HERE-documents"?
- var useLineCont = !!lineContinuationChar
- var useHereDoc = !!hereDocDelim
- // create regexp to capture prompt and remaining line
- if (isRegexp) {
- regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)')
- } else {
- regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)')
- }
- const outputLines = [];
- var promptFound = false;
- var gotLineCont = false;
- var 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
- }
|