UNPKG

1.36 kBJavaScriptView Raw
1(function (Prism) {
2
3 Prism.languages.diff = {
4 'coord': [
5 // Match all kinds of coord lines (prefixed by "+++", "---" or "***").
6 /^(?:\*{3}|-{3}|\+{3}).*$/m,
7 // Match "@@ ... @@" coord lines in unified diff.
8 /^@@.*@@$/m,
9 // Match coord lines in normal diff (starts with a number).
10 /^\d.*$/m
11 ]
12
13 // deleted, inserted, unchanged, diff
14 };
15
16 /**
17 * A map from the name of a block to its line prefix.
18 *
19 * @type {Object<string, string>}
20 */
21 var PREFIXES = {
22 'deleted-sign': '-',
23 'deleted-arrow': '<',
24 'inserted-sign': '+',
25 'inserted-arrow': '>',
26 'unchanged': ' ',
27 'diff': '!',
28 };
29
30 // add a token for each prefix
31 Object.keys(PREFIXES).forEach(function (name) {
32 var prefix = PREFIXES[name];
33
34 var alias = [];
35 if (!/^\w+$/.test(name)) { // "deleted-sign" -> "deleted"
36 alias.push(/\w+/.exec(name)[0]);
37 }
38 if (name === 'diff') {
39 alias.push('bold');
40 }
41
42 Prism.languages.diff[name] = {
43 pattern: RegExp('^(?:[' + prefix + '].*(?:\r\n?|\n|(?![\\s\\S])))+', 'm'),
44 alias: alias,
45 inside: {
46 'line': {
47 pattern: /(.)(?=[\s\S]).*(?:\r\n?|\n)?/,
48 lookbehind: true
49 },
50 'prefix': {
51 pattern: /[\s\S]/,
52 alias: /\w+/.exec(name)[0]
53 }
54 }
55 };
56
57 });
58
59 // make prefixes available to Diff plugin
60 Object.defineProperty(Prism.languages.diff, 'PREFIXES', {
61 value: PREFIXES
62 });
63
64}(Prism));