From 99d8cc1d0b158d1fb2e992996e7fabf2ec3751a3 Mon Sep 17 00:00:00 2001 From: Sukka Date: Tue, 26 Apr 2022 11:22:03 +0800 Subject: [PATCH] refactor(prism): support alias (#274) --- lib/prism.js | 18 ++++++++++++++++-- test/prism.spec.js | 32 +++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/lib/prism.js b/lib/prism.js index c6ed45ce..3a5f04d0 100644 --- a/lib/prism.js +++ b/lib/prism.js @@ -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'); @@ -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 = []; diff --git a/test/prism.spec.js b/test/prism.spec.js index 32055a76..324e2fb6 100644 --- a/test/prism.spec.js +++ b/test/prism.spec.js @@ -109,8 +109,8 @@ describe('prismHighlight', () => { const result = prismHighlight(input, { lang: 'js' }); // Start Tag - result.should.contains('
');
-    result.should.contains('');
+    result.should.contains('');
+    result.should.contains('');
-    result.should.contains('');
+    result.should.contains('');
+    result1.should.contains('
');
 
     // isPreprocess - true (firstLine should be disabled)
     const result2 = prismHighlight(input, { lang: 'js', isPreprocess: true, lineNumber: true, firstLine: '-5' });
-    result2.should.contains('
');
+    result2.should.contains('
');
 
     // lineNumber - false (firstLine should be disabled)
     const result3 = prismHighlight(input, { lang: 'js', isPreprocess: false, lineNumber: false, firstLine: '-5' });
-    result3.should.contains('
');
+    result3.should.contains('
');
 
     // Only validate the result1
     validateHtmlAsync(result1, done);