Personal website
at master 64 lines 1.4 kB view 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));