(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} */ 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));