diff --git a/src/renderer/src/pages/home/Markdown/Markdown.tsx b/src/renderer/src/pages/home/Markdown/Markdown.tsx index f6ec08b6..18d757a0 100644 --- a/src/renderer/src/pages/home/Markdown/Markdown.tsx +++ b/src/renderer/src/pages/home/Markdown/Markdown.tsx @@ -1,6 +1,7 @@ import 'katex/dist/katex.min.css' import { Message } from '@renderer/types' +import { escapeBrackets } from '@renderer/utils/formula' import { isEmpty } from 'lodash' import { FC, useMemo } from 'react' import { useTranslation } from 'react-i18next' @@ -31,7 +32,7 @@ const Markdown: FC = ({ message }) => { const empty = isEmpty(message.content) const paused = message.status === 'paused' const content = empty && paused ? t('message.chat.completion.paused') : message.content - return escapeBrackets(escapeDollarNumber(content)) + return escapeBrackets(content) }, [message.content, message.status, t]) return ( @@ -50,35 +51,4 @@ const Markdown: FC = ({ message }) => { ) } -function escapeDollarNumber(text: string) { - let escapedText = '' - - for (let i = 0; i < text.length; i += 1) { - let char = text[i] - const nextChar = text[i + 1] || ' ' - - if (char === '$' && nextChar >= '0' && nextChar <= '9') { - char = '\\$' - } - - escapedText += char - } - - return escapedText -} - -function escapeBrackets(text: string) { - const pattern = /(```[\s\S]*?```|`.*?`)|\\\[([\s\S]*?[^\\])\\\]|\\\((.*?)\\\)/g - return text.replace(pattern, (match, codeBlock, squareBracket, roundBracket) => { - if (codeBlock) { - return codeBlock - } else if (squareBracket) { - return `$$${squareBracket}$$` - } else if (roundBracket) { - return `$${roundBracket}$` - } - return match - }) -} - export default Markdown diff --git a/src/renderer/src/utils/formula.ts b/src/renderer/src/utils/formula.ts new file mode 100644 index 00000000..3c582840 --- /dev/null +++ b/src/renderer/src/utils/formula.ts @@ -0,0 +1,30 @@ +export function escapeDollarNumber(text: string) { + let escapedText = '' + + for (let i = 0; i < text.length; i += 1) { + let char = text[i] + const nextChar = text[i + 1] || ' ' + + if (char === '$' && nextChar >= '0' && nextChar <= '9') { + char = '\\$' + } + + escapedText += char + } + + return escapedText +} + +export function escapeBrackets(text: string) { + const pattern = /(```[\s\S]*?```|`.*?`)|\\\[([\s\S]*?[^\\])\\\]|\\\((.*?)\\\)/g + return text.replace(pattern, (match, codeBlock, squareBracket, roundBracket) => { + if (codeBlock) { + return codeBlock + } else if (squareBracket) { + return `$$${squareBracket}$$` + } else if (roundBracket) { + return `$${roundBracket}$` + } + return match + }) +}