1
0
Fork 0

Nested message formatting

This commit is contained in:
Pabloader 2026-03-11 15:11:07 +00:00
parent f25621daef
commit b4db7fd2a7
1 changed files with 23 additions and 25 deletions

View File

@ -25,50 +25,48 @@ export namespace MessageTools {
} }
export const format = (message: string): string => { export const format = (message: string): string => {
const replaceRegex = /([*"]\*?)/ig; const replaceRegex = /(\*\*?|")/ig;
const splitToken = '___SPLIT_AWOORWA___'; const splitToken = '___SPLIT_AWOORWA___';
const preparedMessage = message.replace(replaceRegex, `${splitToken}$1${splitToken}`); const preparedMessage = message.replace(replaceRegex, `${splitToken}$1${splitToken}`);
const parts = preparedMessage.split(splitToken); const parts = preparedMessage.split(splitToken);
let isText = true; const stack: string[] = [];
let keepPart = true;
let resultHTML = ''; let resultHTML = '';
for (const part of parts) { for (const part of parts) {
const isClose = stack.at(-1) === part;
if (isText) { if (isClose) {
if (part === '*') { stack.pop();
isText = false;
keepPart = false;
resultHTML += `<span class="italic">`;
} else if (part === '**') {
isText = false;
keepPart = false;
resultHTML += `<span class="bold">`;
} else if (part === '"') {
isText = false;
keepPart = true;
resultHTML += `<span class="quote">"`;
} else {
resultHTML += part;
}
} else {
if (part === '*' || part === '**') { if (part === '*' || part === '**') {
resultHTML += `</span>`; resultHTML += `</span>`;
isText = true;
} else if (part === '"') { } else if (part === '"') {
resultHTML += `"</span>`; resultHTML += `"</span>`;
isText = true; }
} else {
if (part === '*') {
stack.push(part);
resultHTML += `<span class="italic">`;
} else if (part === '**') {
stack.push(part);
resultHTML += `<span class="bold">`;
} else if (part === '"') {
stack.push(part);
resultHTML += `<span class="quote">"`;
} else { } else {
resultHTML += part; resultHTML += part;
} }
} }
} }
if (!isText) { while (stack.length) {
resultHTML += `</span>`; const part = stack.pop();
if (part === '*' || part === '**') {
resultHTML += `</span>`;
} else if (part === '"') {
resultHTML += `"</span>`;
}
} }
return resultHTML; return resultHTML;