export const highlight = (message: string, keepMarkup = true): string => { let resultHTML = ''; const replaceRegex = /(\*\*?|"|```|`)/ig; const splitToken = '___SPLIT_AWOORWA___'; const preparedMessage = message.replace(replaceRegex, `${splitToken}$1${splitToken}`); const parts = preparedMessage.split(splitToken); const stack: string[] = []; let inCodeBlock = false; for (const part of parts) { const isClose = stack.at(-1) === part; const keepPart = keepMarkup || part === '"'; if (inCodeBlock) { if (part === '```' && isClose) { inCodeBlock = false; stack.pop(); resultHTML += `${keepPart ? part : ''}`; } else { resultHTML += part; } continue; } if (isClose) { stack.pop(); if (part === '*' || part === '**' || part === '"' || part === '`' || part === '```') { resultHTML += `${keepPart ? part : ''}`; } } else { if (part === '*') { stack.push(part); resultHTML += `${keepPart ? part : ''}`; } else if (part === '**') { stack.push(part); resultHTML += `${keepPart ? part : ''}`; } else if (part === '"') { stack.push(part); resultHTML += `"`; } else if (part === '```') { stack.push(part); inCodeBlock = true; resultHTML += ``; } else if (part === '`') { stack.push(part); resultHTML += ``; } else { resultHTML += part; } } } while (stack.length) { const part = stack.pop(); if (part === '*' || part === '**' || part === '"' || part === '`' || part === '```') { resultHTML += ``; } } return resultHTML; }