Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

do highlightjs magic for java, sql and json as well #120

Merged
merged 1 commit into from
Sep 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading