From 9c1e12945c0c348a236d7ddada6343184c8e2318 Mon Sep 17 00:00:00 2001 From: Pekka Helesuo Date: Tue, 10 Sep 2024 16:41:52 +0300 Subject: [PATCH] do highlightjs magic for java, sql and json as well --- lib/markdownToHtml.test.ts | 32 +++++++++++++++++++------------- lib/markdownToHtml.ts | 12 +++++++----- lib/utils.ts | 8 ++++++-- 3 files changed, 32 insertions(+), 20 deletions(-) diff --git a/lib/markdownToHtml.test.ts b/lib/markdownToHtml.test.ts index 6f6b3ae..c71fb50 100644 --- a/lib/markdownToHtml.test.ts +++ b/lib/markdownToHtml.test.ts @@ -1,5 +1,5 @@ -import { badgeTemplates, insertIdsToHeaders, processAllLinks, processCodeBlocks, processHeaders, processInternalMDLinks, processJavascriptBlocks, processMigrationGuideLinks, processTripleQuoteCodeBlocks, updateMarkdownHtmlStyleTags, updateMarkdownImagePaths } from "./markdownToHtml"; +import { badgeTemplates, insertIdsToHeaders, processAllLinks, processCodeBlocks, processHeaders, processInternalMDLinks, processLanguageSpecificCodeBlocks, processMigrationGuideLinks, processTripleQuoteCodeBlocks, updateMarkdownHtmlStyleTags, updateMarkdownImagePaths } from "./markdownToHtml"; import slugify from 'slugify'; const createTestHtml = () => { @@ -156,24 +156,30 @@ describe('markdownToHtml tests', () => { }) }); - describe('processing javascript blocks', () => { - it ('should prepare javascript - blocks for highlight.js', () => { - const markdown = "```javascript var a = 0;```"; - const processed = processJavascriptBlocks(markdown); - expect(processed.indexOf('´')).toBe(-1); - expect(processed.startsWith('
 {
+    const langs = ['javascript', 'java', 'sql', 'json'];
+
+    it ('should prepare a block in given language for highlight.js', () => {
+      langs.forEach((lang) => {
+        const markdown = "```" + lang + " var a = 0;```";
+        const processed = processLanguageSpecificCodeBlocks(markdown, lang);
+        expect(processed.indexOf('´')).toBe(-1);
+        expect(processed.startsWith('
 {
   return processedContent;
 }
 
-export const processJavascriptBlocks = (markdownContent: string) => {
-  const javascriptRegex = /```javascript\s*([^`]|\n)*```/g;
-  const replacedContent = markdownContent.replace(javascriptRegex, (match) => {
-    const startTagRegex = /```javascript/;
+export const processLanguageSpecificCodeBlocks = (markdownContent: string, language: string) => {
+  //const codeRegex = /```javascript\s*([^`]|\n)*```/g;
+  const codeRegex = new RegExp(`\`\`\`${language}\\s*([^\\\`]|\\n)*\`\`\``, 'g')
+
+  const replacedContent = markdownContent.replace(codeRegex, (match) => {
+    const startTagRegex = new RegExp(`\`\`\`${language}`);
     const endTagRegex = /```/;
     const codeContent = match.replace(startTagRegex, '').replace(endTagRegex, '').trim();
-    return `
${hljs.highlightAuto(codeContent).value}
`; + return `
${hljs.highlightAuto(codeContent).value}
`; }); return replacedContent; } diff --git a/lib/utils.ts b/lib/utils.ts index a9074f6..f3f7d84 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -2,7 +2,7 @@ import fs from 'fs' import path from 'path' import matter from 'gray-matter' import { MERMAID_SNIPPET, mdToHtml } from './customMarked' -import { insertIdsToHeaders, processAllLinks, processCodeBlocks, processHeaders, processInternalMDLinks, processJavascriptBlocks, processMigrationGuideLinks, processTripleQuoteCodeBlocks, updateMarkdownHtmlStyleTags, updateMarkdownImagePaths } from './markdownToHtml' +import { insertIdsToHeaders, processAllLinks, processCodeBlocks, processHeaders, processInternalMDLinks, processLanguageSpecificCodeBlocks, processMigrationGuideLinks, processTripleQuoteCodeBlocks, updateMarkdownHtmlStyleTags, updateMarkdownImagePaths } from './markdownToHtml' import { MarkdownFileMetadata, VersionDocType } from '@/types/types' function compileMarkdownToHTML(markdown: string, startingSectionNumber: string): { @@ -116,7 +116,11 @@ const processMarkdown = (markdown: string, imagesPath: string, indexJSON: Markdo markdown = processAllLinks(markdown); // these are dependent to be run in this order - markdown = processJavascriptBlocks(markdown); + markdown = processLanguageSpecificCodeBlocks(markdown, 'javascript'); + markdown = processLanguageSpecificCodeBlocks(markdown, 'java'); + markdown = processLanguageSpecificCodeBlocks(markdown, 'sql'); + markdown = processLanguageSpecificCodeBlocks(markdown, 'json'); + markdown = processTripleQuoteCodeBlocks(markdown); markdown = processCodeBlocks(markdown); return markdown;