summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEkaitz Zarraga <ekaitz@elenq.tech>2022-04-09 14:13:06 +0200
committerEkaitz Zarraga <ekaitz@elenq.tech>2022-04-09 14:13:06 +0200
commitcc3e680ae7120c3c5e4b521ded64126cfb62bfd5 (patch)
treeff810e55fee0808bbd415ec43b0fd86b63e050ac
parent1cc4feb58b82a98b8abf476b063c4affca36fa1e (diff)
Add prism highlighter support for diff files
-rw-r--r--themes/elenq/static/js/prism-hl.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/themes/elenq/static/js/prism-hl.js b/themes/elenq/static/js/prism-hl.js
index f894d91..ad2a339 100644
--- a/themes/elenq/static/js/prism-hl.js
+++ b/themes/elenq/static/js/prism-hl.js
@@ -1361,3 +1361,70 @@ Prism.languages.yaml = {
};
Prism.languages.yml = Prism.languages.yaml;
+
+
+(function (Prism) {
+
+ Prism.languages.diff = {
+ 'coord': [
+ // Match all kinds of coord lines (prefixed by "+++", "---" or "***").
+ /^(?:\*{3}|-{3}|\+{3}).*$/m,
+ // Match "@@ ... @@" coord lines in unified diff.
+ /^@@.*@@$/m,
+ // Match coord lines in normal diff (starts with a number).
+ /^\d.*$/m
+ ]
+
+ // deleted, inserted, unchanged, diff
+ };
+
+ /**
+ * A map from the name of a block to its line prefix.
+ *
+ * @type {Object<string, string>}
+ */
+ var PREFIXES = {
+ 'deleted-sign': '-',
+ 'deleted-arrow': '<',
+ 'inserted-sign': '+',
+ 'inserted-arrow': '>',
+ 'unchanged': ' ',
+ 'diff': '!',
+ };
+
+ // add a token for each prefix
+ Object.keys(PREFIXES).forEach(function (name) {
+ var prefix = PREFIXES[name];
+
+ var alias = [];
+ if (!/^\w+$/.test(name)) { // "deleted-sign" -> "deleted"
+ alias.push(/\w+/.exec(name)[0]);
+ }
+ if (name === 'diff') {
+ alias.push('bold');
+ }
+
+ Prism.languages.diff[name] = {
+ pattern: RegExp('^(?:[' + prefix + '].*(?:\r\n?|\n|(?![\\s\\S])))+', 'm'),
+ 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
+ Object.defineProperty(Prism.languages.diff, 'PREFIXES', {
+ value: PREFIXES
+ });
+
+}(Prism));
+