diff --git a/packages/docusaurus-theme-common/src/utils/codeBlockUtils.ts b/packages/docusaurus-theme-common/src/utils/codeBlockUtils.ts index 17a85878dcb5..16a45f856d84 100644 --- a/packages/docusaurus-theme-common/src/utils/codeBlockUtils.ts +++ b/packages/docusaurus-theme-common/src/utils/codeBlockUtils.ts @@ -13,18 +13,31 @@ const codeBlockTitleRegex = /title=(?["'])(?.*?)\1/; const metastringLinesRangeRegex = /\{(?<range>[\d,-]+)\}/; // Supported types of highlight comments -const commentPatterns = { +const popularCommentPatterns = { js: {start: '\\/\\/', end: ''}, jsBlock: {start: '\\/\\*', end: '\\*\\/'}, jsx: {start: '\\{\\s*\\/\\*', end: '\\*\\/\\s*\\}'}, bash: {start: '#', end: ''}, html: {start: '<!--', end: '-->'}, +} as const; + +const commentPatterns = { + ...popularCommentPatterns, // shallow copy is sufficient + // minor comment styles lua: {start: '--', end: ''}, wasm: {start: '\\;\\;', end: ''}, tex: {start: '%', end: ''}, -}; + vb: {start: "['‘’]", end: ''}, + rem: {start: '[Rr][Ee][Mm]\\b', end: ''}, + f90: {start: '!', end: ''}, // Free format only + ml: {start: '\\(\\*', end: '\\*\\)'}, + cobol: {start: '\\*>', end: ''}, // Free format only +} as const; type CommentType = keyof typeof commentPatterns; +const popularCommentTypes = Object.keys( + popularCommentPatterns, +) as CommentType[]; export type MagicCommentConfig = { className: string; @@ -99,15 +112,34 @@ function getAllMagicCommentDirectiveStyles( case 'wasm': return getCommentPattern(['wasm'], magicCommentDirectives); + case 'vb': + case 'vbnet': + case 'vba': + case 'visual-basic': + return getCommentPattern(['vb', 'rem'], magicCommentDirectives); + + case 'batch': + return getCommentPattern(['rem'], magicCommentDirectives); + + case 'basic': // https://github.com/PrismJS/prism/blob/master/components/prism-basic.js#L3 + return getCommentPattern(['rem', 'f90'], magicCommentDirectives); + + case 'fsharp': + return getCommentPattern(['js', 'ml'], magicCommentDirectives); + + case 'ocaml': + case 'sml': + return getCommentPattern(['ml'], magicCommentDirectives); + + case 'fortran': + return getCommentPattern(['f90'], magicCommentDirectives); + + case 'cobol': + return getCommentPattern(['cobol'], magicCommentDirectives); + default: - // All comment types except lua, wasm and matlab - return getCommentPattern( - Object.keys(commentPatterns).filter( - (pattern) => - !['lua', 'wasm', 'tex', 'latex', 'matlab'].includes(pattern), - ) as CommentType[], - magicCommentDirectives, - ); + // All popular comment types + return getCommentPattern(popularCommentTypes, magicCommentDirectives); } } diff --git a/project-words.txt b/project-words.txt index 5bb1628e9788..2366a73e1db4 100644 --- a/project-words.txt +++ b/project-words.txt @@ -257,6 +257,7 @@ precaching preconfigured prerendered prerendering +printfn println prismjs producthunt @@ -303,6 +304,7 @@ sebastienlorber sensical setaf setext +setlocal Shiki shiki shortcodes @@ -373,6 +375,7 @@ unswizzle upvotes urlset Vannicatte +vbnet Vetter vetter vfile diff --git a/website/_dogfooding/_pages tests/code-block-tests.mdx b/website/_dogfooding/_pages tests/code-block-tests.mdx index 3b778e7cea56..d631092e3831 100644 --- a/website/_dogfooding/_pages tests/code-block-tests.mdx +++ b/website/_dogfooding/_pages tests/code-block-tests.mdx @@ -384,6 +384,61 @@ y = times2(x); \end{document} ``` +```vbnet title="vbnet.vb" +Dim languages As New Set(Of String) From { + ' highlight-start + "C#", + "Visual Basic", + "F#", + ' highlight-end + "PowerShell", + ' highlight-next-line + "TypeScript" +} +``` + +```batch title="cmd.bat" +rem highlight-start +@echo off +setlocal +Rem highlight-end +ipconfig +REM highlight-next-line +echo Docusaurus is awesome +netstat +``` + +```fortran title="fortran.f90" +! highlight-start +program hello +! highlight-end + implicit none + ! highlight-next-line + print *, "Hello, World!" +end program hello +``` + +```cobol title="cobol.cob" +*> highlight-start +IDENTIFICATION DIVISION. +PROGRAM-ID. HELLO. +*> highlight-end +PROCEDURE DIVISION. + *> highlight-next-line + DISPLAY "Hello, World!". +END PROGRAM HELLO. +``` + +```fsharp title="fsharp.fsx" +(* highlight-start *) +[<EntryPoint>] +(* highlight-end *) +let main _ = + // highlight-next-line + printfn "Hello, World!" + 0 +``` + ## HTML - script + style highlighting See https://github.com/facebook/docusaurus/issues/9517