Skip to content

Commit

Permalink
refactor(prism): support alias (#274)
Browse files Browse the repository at this point in the history
  • Loading branch information
SukkaW committed Apr 26, 2022
1 parent a20e697 commit 99d8cc1
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 9 deletions.
18 changes: 16 additions & 2 deletions lib/prism.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,19 @@ const prismLoadLanguages = require('prismjs/components/');

// https://github.com/PrismJS/prism/issues/2145
const prismComponents = require('prismjs/components');
const prismSupportedLanguages = Object.keys(prismComponents.languages);

const prismAlias = Object.entries(prismComponents.languages).reduce((acc, [key, value]) => {
if (value.alias) {
if (Array.isArray(value.alias)) {
value.alias.forEach(alias => (acc[alias] = key));
} else if (typeof value.alias === 'string') {
acc[value.alias] = key;
}
}
return acc;
}, {});

const prismSupportedLanguages = Object.keys(prismComponents.languages).concat(Object.keys(prismAlias));

const escapeHTML = require('./escape_html');

Expand Down Expand Up @@ -59,7 +71,9 @@ function PrismUtil(str, options = {}) {
} = options;

// To be consistent with highlight.js
const language = lang === 'plaintext' || lang === 'none' ? 'none' : lang;
let language = lang === 'plaintext' || lang === 'none' ? 'none' : lang;

if (prismAlias[language]) language = prismAlias[language];

const preTagClassArr = [];
const preTagAttrArr = [];
Expand Down
32 changes: 25 additions & 7 deletions test/prism.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,8 @@ describe('prismHighlight', () => {
const result = prismHighlight(input, { lang: 'js' });

// Start Tag
result.should.contains('<pre class="line-numbers language-js" data-language="js">');
result.should.contains('<code class="language-js');
result.should.contains('<pre class="line-numbers language-javascript" data-language="javascript">');
result.should.contains('<code class="language-javascript');
// End Tag
result.should.contains(endTag);
// Line Number
Expand Down Expand Up @@ -139,6 +139,24 @@ describe('prismHighlight', () => {
validateHtmlAsync(result, done);
});

it('language - ts (an alias for typescript)', done => {
const input = 'const a: string = "";';

const result = prismHighlight(input, { lang: 'ts' });

// Start Tag
result.should.contains('<pre class="line-numbers language-typescript" data-language="typescript">');
result.should.contains('<code class="language-typescript');
// End Tag
result.should.contains(endTag);
// Line Number
result.should.contains(lineNumberStartTag);
// Being highlighted
result.should.contains(highlightToken);

validateHtmlAsync(result, done);
});

it('language - unsupported by prism', done => {
const input = `
[ yet another pi calculation program in bf
Expand Down Expand Up @@ -206,8 +224,8 @@ describe('prismHighlight', () => {
const result = prismHighlight(input, { lang: 'js', isPreprocess: false });

// Start Tag
result.should.contains('<pre class="line-numbers language-js" data-language="js">');
result.should.contains('<code class="language-js');
result.should.contains('<pre class="line-numbers language-javascript" data-language="javascript">');
result.should.contains('<code class="language-javascript');
// End Tag
result.should.contains(endTag);
// Line Number
Expand Down Expand Up @@ -267,15 +285,15 @@ describe('prismHighlight', () => {
].join('\n');

const result1 = prismHighlight(input, { lang: 'js', isPreprocess: false, lineNumber: true, firstLine: '-5' });
result1.should.contains('<pre class="line-numbers language-js" data-language="js" data-start="-5">');
result1.should.contains('<pre class="line-numbers language-javascript" data-language="javascript" data-start="-5">');

// isPreprocess - true (firstLine should be disabled)
const result2 = prismHighlight(input, { lang: 'js', isPreprocess: true, lineNumber: true, firstLine: '-5' });
result2.should.contains('<pre class="line-numbers language-js" data-language="js">');
result2.should.contains('<pre class="line-numbers language-javascript" data-language="javascript">');

// lineNumber - false (firstLine should be disabled)
const result3 = prismHighlight(input, { lang: 'js', isPreprocess: false, lineNumber: false, firstLine: '-5' });
result3.should.contains('<pre class="language-js" data-language="js">');
result3.should.contains('<pre class="language-javascript" data-language="javascript">');

// Only validate the result1
validateHtmlAsync(result1, done);
Expand Down

0 comments on commit 99d8cc1

Please sign in to comment.