Nested message formatting
This commit is contained in:
parent
f25621daef
commit
b4db7fd2a7
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue