From b4db7fd2a7b765129c94cb33e37df6984c9e127b Mon Sep 17 00:00:00 2001 From: Pabloader Date: Wed, 11 Mar 2026 15:11:07 +0000 Subject: [PATCH] Nested message formatting --- src/games/ai-story/tools/messages.ts | 48 +++++++++++++--------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/src/games/ai-story/tools/messages.ts b/src/games/ai-story/tools/messages.ts index a54fcff..65d2490 100644 --- a/src/games/ai-story/tools/messages.ts +++ b/src/games/ai-story/tools/messages.ts @@ -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) { - if (part === '*') { - isText = false; - keepPart = false; - resultHTML += ``; - } else if (part === '**') { - isText = false; - keepPart = false; - resultHTML += ``; - } else if (part === '"') { - isText = false; - keepPart = true; - resultHTML += `"`; - } else { - resultHTML += part; - } - } else { + const isClose = stack.at(-1) === part; + if (isClose) { + stack.pop(); if (part === '*' || part === '**') { resultHTML += ``; - isText = true; } else if (part === '"') { resultHTML += `"`; - isText = true; + } + } else { + if (part === '*') { + stack.push(part); + resultHTML += ``; + } else if (part === '**') { + stack.push(part); + resultHTML += ``; + } else if (part === '"') { + stack.push(part); + resultHTML += `"`; } else { resultHTML += part; } } } - if (!isText) { - resultHTML += ``; + while (stack.length) { + const part = stack.pop(); + if (part === '*' || part === '**') { + resultHTML += ``; + } else if (part === '"') { + resultHTML += `"`; + } } return resultHTML;