/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from 'react'; import clsx from 'clsx'; import {useThemeConfig, usePrismTheme} from '@docusaurus/theme-common'; import { parseCodeBlockTitle, parseLanguage, parseLines, containsLineNumbers, useCodeWordWrap, } from '@docusaurus/theme-common/internal'; import {Highlight} from 'prism-react-renderer'; import Line from '@theme/CodeBlock/Line'; import CopyButton from '@theme/CodeBlock/CopyButton'; import WordWrapButton from '@theme/CodeBlock/WordWrapButton'; import Container from '@theme/CodeBlock/Container'; import styles from './styles.module.css'; // Prism languages are always lowercase // We want to fail-safe and allow both "php" and "PHP" // See https://github.com/facebook/docusaurus/issues/9012 function normalizeLanguage(language) { return language?.toLowerCase(); } export default function CodeBlockString({ children, className: blockClassName = '', metastring, title: titleProp, showLineNumbers: showLineNumbersProp, language: languageProp, }) { const { prism: {defaultLanguage, magicComments}, } = useThemeConfig(); const language = normalizeLanguage( 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, style, tokens, getLineProps, getTokenProps}) => (
              
                {tokens.map((line, i) => (
                  
                ))}
              
            
)}
{(wordWrap.isEnabled || wordWrap.isCodeScrollable) && ( wordWrap.toggle()} isEnabled={wordWrap.isEnabled} /> )}
); }