From 2bf38656a3fefa77de7b03bef6b3b8cf0eca7876 Mon Sep 17 00:00:00 2001 From: Hamzat Victor Oluwabori <63613078+Code-Victor@users.noreply.github.com> Date: Sat, 20 Aug 2022 11:50:01 +0100 Subject: [PATCH 1/3] feat: added support for diff with syntax highlight --- src/generator.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/generator.js b/src/generator.js index b560940..e88aae1 100644 --- a/src/generator.js +++ b/src/generator.js @@ -196,11 +196,17 @@ const rehypePrismGenerator = (refractor) => { // Syntax highlight if (lang) { try { + let rootLang + if (lang.includes('diff:')){ + rootLang=lang.split(':')[1] + } else{ + rootLang=lang + } // @ts-ignore - refractorRoot = refractor.highlight(toString(node), lang) + refractorRoot = refractor.highlight(toString(node), rootLang) // @ts-ignore className is already an array parent.properties.className = (parent.properties.className || []).concat( - 'language-' + lang + 'language-' + rootLang ) } catch (err) { if (options.ignoreMissing && /Unknown language/.test(err.message)) { @@ -267,9 +273,9 @@ const rehypePrismGenerator = (refractor) => { } // Diff classes - if (lang === 'diff' && toString(line).substring(0, 1) === '-') { + if ((lang === 'diff' || lang.includes('diff:')) && toString(line).substring(0, 1) === '-') { line.properties.className.push('deleted') - } else if (lang === 'diff' && toString(line).substring(0, 1) === '+') { + } else if ((lang === 'diff' || lang.includes('diff:')) && toString(line).substring(0, 1) === '+') { line.properties.className.push('inserted') } } From 2efd164e82d84be61400b2f6759511d5731367fd Mon Sep 17 00:00:00 2001 From: Code-Victor Date: Sat, 20 Aug 2022 18:49:18 +0100 Subject: [PATCH 2/3] added tests for diff syntax highlight --- test.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test.js b/test.js index 8e4f85a..9714a17 100644 --- a/test.js +++ b/test.js @@ -397,4 +397,22 @@ test('works as a remarkjs / unifiedjs plugin', () => { assert.is(result, expected) }) +test('diff and code highlighting should work together', () => { + const result = processHtml( + dedent` +

+    .hello{
+    - background:url('./urel.png');
+    + background-image:url('./urel.png');
+    }
+    
+ `, + { ignoreMissing: true } + ) + assert.ok(result.includes(`
`))
+  assert.ok(result.includes(``))
+  assert.ok(result.includes(``))
+  assert.ok(result.includes(``))
+})
+
 test.run()

From 31f49aa66f57d68c78b0038aa1bb78cae80d2878 Mon Sep 17 00:00:00 2001
From: Code-Victor 
Date: Sat, 20 Aug 2022 18:50:34 +0100
Subject: [PATCH 3/3] changed `diff:` syntax to `diff-` syntax

---
 src/generator.js | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/generator.js b/src/generator.js
index e88aae1..3e1f5de 100644
--- a/src/generator.js
+++ b/src/generator.js
@@ -197,8 +197,8 @@ const rehypePrismGenerator = (refractor) => {
       if (lang) {
         try {
           let rootLang
-          if (lang.includes('diff:')){
-            rootLang=lang.split(':')[1]
+          if (lang?.includes('diff-')){
+            rootLang=lang.split('-')[1]
           } else{
             rootLang=lang
           }
@@ -273,9 +273,9 @@ const rehypePrismGenerator = (refractor) => {
         }
 
         // Diff classes
-        if ((lang === 'diff' || lang.includes('diff:')) && toString(line).substring(0, 1) === '-') {
+        if ((lang === 'diff' || lang?.includes('diff-')) && toString(line).substring(0, 1) === '-') {
           line.properties.className.push('deleted')
-        } else if ((lang === 'diff' || lang.includes('diff:')) && toString(line).substring(0, 1) === '+') {
+        } else if ((lang === 'diff' || lang?.includes('diff-')) && toString(line).substring(0, 1) === '+') {
           line.properties.className.push('inserted')
         }
       }