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