import { usePrismTheme, useThemeConfig } from "@docusaurus/theme-common"; import { containsLineNumbers, parseCodeBlockTitle, parseLanguage, parseLines, useCodeWordWrap, } from "@docusaurus/theme-common/internal"; import Line from "@theme/CodeBlock/Line"; import clsx from "clsx"; import Highlight, { defaultProps } from "prism-react-renderer"; import React from "react"; import { CommonCodeBlockContainer } from "./common-codeblock-container"; import { CommonCopyButton } from "./common-copy-button"; import { CommonWordWrapButton } from "./common-wordwrap-button"; const DefaultDocumentIcon = (props: React.SVGProps) => ( ); const CodeBlockTitle = ({ children, icon = , }: { children?: React.ReactNode; icon?: React.ReactNode; }) => { return (
{icon} {children}
); }; export const CodeBlockString = ({ children, className: blockClassName = "", metastring, title: titleProp, showLineNumbers: showLineNumbersProp, language: languageProp, icon, style, }) => { const { prism: { defaultLanguage, magicComments }, } = useThemeConfig(); const language = languageProp ?? parseLanguage(blockClassName) ?? defaultLanguage; const prismTheme = usePrismTheme(); const wordWrap = useCodeWordWrap(); // We still parse the metastring in case we want to support more syntax in the // future. Note that MDX doesn't strip quotes when parsing metastring: // "title=\"xyz\"" => title: "\"xyz\"" const title = parseCodeBlockTitle(metastring) || titleProp; const { lineClassNames, code } = parseLines(children, { metastring, language, magicComments, }); const showLineNumbers = showLineNumbersProp ?? containsLineNumbers(metastring); return ( {title && {title}}
{({ className, tokens, getLineProps, getTokenProps }) => (
                            
                                {tokens.map((line, i) => (
                                    
                                ))}
                            
                        
)}
{(wordWrap.isEnabled || wordWrap.isCodeScrollable) && ( )}
); };