From fd432a5b1d3b2ede9f3e4459b830b36c8e9ff019 Mon Sep 17 00:00:00 2001 From: Sam Chen Date: Sat, 4 Apr 2020 21:50:48 +0800 Subject: [PATCH] Diff: Added `prefix` token (#2281) This adds a token to match line prefixes. --- components/prism-diff.js | 14 ++++++++++++-- components/prism-diff.min.js | 2 +- tests/languages/diff/diff_feature.test | 12 ++++++------ 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/components/prism-diff.js b/components/prism-diff.js index 9dfc0e9153..2d824f7b76 100644 --- a/components/prism-diff.js +++ b/components/prism-diff.js @@ -40,10 +40,20 @@ } Prism.languages.diff[name] = { - // pattern: /^(?:[_].*(?:\r\n?|\n|(?![\s\S])))+/m pattern: RegExp('^(?:[' + prefix + '].*(?:\r\n?|\n|(?![\\s\\S])))+', 'm'), - alias: alias + alias: alias, + inside: { + 'line': { + pattern: /(.)(?=[\s\S]).*(?:\r\n?|\n)?/, + lookbehind: true + }, + 'prefix': { + pattern: /[\s\S]/, + alias: /\w+/.exec(name)[0] + } + } }; + }); // make prefixes available to Diff plugin diff --git a/components/prism-diff.min.js b/components/prism-diff.min.js index 708a5a1dbc..18896474fd 100644 --- a/components/prism-diff.min.js +++ b/components/prism-diff.min.js @@ -1 +1 @@ -!function(d){d.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d+.*$/m]};var r={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(r).forEach(function(e){var n=r[e],a=[];/^\w+$/.test(e)||a.push(/\w+/.exec(e)[0]),"diff"===e&&a.push("bold"),d.languages.diff[e]={pattern:RegExp("^(?:["+n+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a}}),Object.defineProperty(d.languages.diff,"PREFIXES",{value:r})}(Prism); \ No newline at end of file +!function(i){i.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d+.*$/m]};var r={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(r).forEach(function(e){var n=r[e],a=[];/^\w+$/.test(e)||a.push(/\w+/.exec(e)[0]),"diff"===e&&a.push("bold"),i.languages.diff[e]={pattern:RegExp("^(?:["+n+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(e)[0]}}}}),Object.defineProperty(i.languages.diff,"PREFIXES",{value:r})}(Prism); \ No newline at end of file diff --git a/tests/languages/diff/diff_feature.test b/tests/languages/diff/diff_feature.test index 4379e56d44..2dbba25c82 100644 --- a/tests/languages/diff/diff_feature.test +++ b/tests/languages/diff/diff_feature.test @@ -11,12 +11,12 @@ ---------------------------------------------------- [ - ["diff", "! qt: core\r\n"], - ["unchanged", " unchanged\r\n"], - ["deleted-sign", "- qt: core\r\n"], - ["inserted-sign", "+ qt: core gui\r\n"], - ["deleted-arrow", "< qt: core\r\n"], - ["inserted-arrow", "> qt: core quick"] + ["diff", [["prefix", "!"], ["line", " qt: core\r\n"]]], + ["unchanged", [["prefix", " "], ["line", " unchanged\r\n"]]], + ["deleted-sign", [["prefix", "-"], ["line", " qt: core\r\n"]]], + ["inserted-sign", [["prefix", "+"], ["line", " qt: core gui\r\n"]]], + ["deleted-arrow", [["prefix", "<"], ["line", " qt: core\r\n"]]], + ["inserted-arrow", [["prefix", ">"], ["line", " qt: core quick"]]] ] ----------------------------------------------------