| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import classNames from 'classnames';
- import Markdown from 'react-markdown';
- import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
- import { oneDark } from 'react-syntax-highlighter/dist/esm/styles/prism';
- import rehypeKatex from 'rehype-katex';
- import rehypeRaw from 'rehype-raw';
- import remarkGfm from 'remark-gfm';
- import remarkMath from 'remark-math';
-
- import 'katex/dist/katex.min.css'; // `rehype-katex` does not import the CSS for you
-
- import { preprocessLaTeX } from '@/utils/chat';
- import styles from './index.less';
-
- const HightLightMarkdown = ({
- children,
- dark = false,
- }: {
- children: string | null | undefined;
- dark?: boolean;
- }) => {
- return (
- <Markdown
- remarkPlugins={[remarkGfm, remarkMath]}
- rehypePlugins={[rehypeRaw, rehypeKatex]}
- className={classNames(styles.text)}
- components={
- {
- code(props: any) {
- const { children, className, node, ...rest } = props;
- const match = /language-(\w+)/.exec(className || '');
- return match ? (
- <SyntaxHighlighter
- {...rest}
- PreTag="div"
- language={match[1]}
- style={dark && oneDark}
- >
- {String(children).replace(/\n$/, '')}
- </SyntaxHighlighter>
- ) : (
- <code {...rest} className={`${className} ${styles.code}`}>
- {children}
- </code>
- );
- },
- } as any
- }
- >
- {children ? preprocessLaTeX(children) : children}
- </Markdown>
- );
- };
-
- export default HightLightMarkdown;
|