Skip to content

Commit

Permalink
Merge pull request #120 from DenverCoder544/java_sql_code_blocks
Browse files Browse the repository at this point in the history
do highlightjs magic for java, sql and json as well
  • Loading branch information
ZakarFin authored Sep 10, 2024
2 parents d506581 + 9c1e129 commit 133d0dc
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 20 deletions.
32 changes: 19 additions & 13 deletions lib/markdownToHtml.test.ts
Original file line number Diff line number Diff line change
@@ -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 = () => {
Expand Down Expand Up @@ -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('<pre><code')).toBe(true);
describe('processing code blocks where language is specified', () => {
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('<pre><code class="language-' + lang)).toBe(true);
});
});

it ('should be able to handle javascript blocks with multiple lines', () => {
const markdown = `
\`\`\`javascript
it ('should be able to handle code blocks in given language with multiple lines', () => {
langs.forEach((lang) => {
const markdown = `
\`\`\`${lang}
var a = 0;
let b = 3;
console.log(a + b);
\`\`\``;
const processed = processJavascriptBlocks(markdown).trim();
expect(processed.indexOf('´')).toBe(-1);
expect(processed.startsWith('<pre><code')).toBe(true);
const processed = processLanguageSpecificCodeBlocks(markdown, lang).trim();
expect(processed.indexOf('´')).toBe(-1);
expect(processed.startsWith('<pre><code class="language-' + lang)).toBe(true);
});
});
});

Expand Down
12 changes: 7 additions & 5 deletions lib/markdownToHtml.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,13 +98,15 @@ export const processHeaders = (markdownContent:string): string => {
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 `<pre><code class="language-javascript hljs">${hljs.highlightAuto(codeContent).value}</code></pre>`;
return `<pre><code class="language-${language} hljs">${hljs.highlightAuto(codeContent).value}</code></pre>`;
});
return replacedContent;
}
Expand Down
8 changes: 6 additions & 2 deletions lib/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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): {
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 133d0dc

Please sign in to comment.