From 33fce1687881bd878148dbf2377b80dc954719bc Mon Sep 17 00:00:00 2001 From: chenxsan Date: Fri, 3 Apr 2020 20:32:08 +0800 Subject: [PATCH] Diff: Add nest token --- components/prism-diff.js | 23 ++++++++++++++++++----- components/prism-diff.min.js | 2 +- tests/languages/diff/diff_feature.test | 8 ++++---- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/components/prism-diff.js b/components/prism-diff.js index 9dfc0e9153..823a41c7ab 100644 --- a/components/prism-diff.js +++ b/components/prism-diff.js @@ -39,11 +39,24 @@ alias.push("bold"); } - Prism.languages.diff[name] = { - // pattern: /^(?:[_].*(?:\r\n?|\n|(?![\s\S])))+/m - pattern: RegExp('^(?:[' + prefix + '].*(?:\r\n?|\n|(?![\\s\\S])))+', 'm'), - alias: alias - }; + var pattern = RegExp('^(?:[' + prefix + '].*(?:\r\n?|\n|(?![\\s\\S])))+', 'm'); + + if (['-', '<', '+', '>'].indexOf(prefix) !== -1) { + var inside = { + prefix: RegExp('^[' + prefix + ']', 'm') + }; + Prism.languages.diff[name] = { + pattern: pattern, + alias: alias, + inside: inside + }; + } else { + Prism.languages.diff[name] = { + pattern: pattern, + alias: alias + }; + } + }); // make prefixes available to Diff plugin diff --git a/components/prism-diff.min.js b/components/prism-diff.min.js index 708a5a1dbc..29b47475bf 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(f){f.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 a=r[e],i=[];/^\w+$/.test(e)||i.push(/\w+/.exec(e)[0]),"diff"===e&&i.push("bold");var n=RegExp("^(?:["+a+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m");if(-1!==["-","<","+",">"].indexOf(a)){var d={prefix:RegExp("^["+a+"]","m")};f.languages.diff[e]={pattern:n,alias:i,inside:d}}else f.languages.diff[e]={pattern:n,alias:i}}),Object.defineProperty(f.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..2c9593bf81 100644 --- a/tests/languages/diff/diff_feature.test +++ b/tests/languages/diff/diff_feature.test @@ -13,10 +13,10 @@ [ ["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"] + ["deleted-sign", [["prefix", "-"], " qt: core\r\n"]], + ["inserted-sign", [["prefix", "+"], " qt: core gui\r\n"]], + ["deleted-arrow", [["prefix", "<"], " qt: core\r\n"]], + ["inserted-arrow", [["prefix", ">"], " qt: core quick"]] ] ----------------------------------------------------