/** * @param {string} value * @returns {RegExp} * */ /** * @param {RegExp | string } re * @returns {string} */ function source(re) { if (!re) return null; if (typeof re === "string") return re; return re.source; } function stripOptionsFromArgs(args) { const opts = args[args.length - 1]; if (typeof opts === 'object' && opts.constructor === Object) { args.splice(args.length - 1, 1); return opts; } else { return {}; } } /** * Any of the passed expresssions may match * * Creates a huge this | this | that | that match * @param {(RegExp | string)[] } args * @returns {string} */ function either(...args) { const opts = stripOptionsFromArgs(args); const joined = '(' + (opts.capture ? "" : "?:") + args.map((x) => source(x)).join("|") + ")"; return joined; } /* Language: Diff Description: Unified and context diff Author: Vasily Polovnyov Website: https://www.gnu.org/software/diffutils/ Category: common */ /** @type LanguageFn */ function diff(hljs) { return { name: 'Diff', aliases: ['patch'], contains: [ { className: 'meta', relevance: 10, match: either( /^@@ +-\d+,\d+ +\+\d+,\d+ +@@/, /^\*\*\* +\d+,\d+ +\*\*\*\*$/, /^--- +\d+,\d+ +----$/ ) }, { className: 'comment', variants: [ { begin: either( /Index: /, /^index/, /={3,}/, /^-{3}/, /^\*{3} /, /^\+{3}/, /^diff --git/ ), end: /$/ }, { match: /^\*{15}$/ } ] }, { className: 'addition', begin: /^\+/, end: /$/ }, { className: 'deletion', begin: /^-/, end: /$/ }, { className: 'addition', begin: /^!/, end: /$/ } ] }; } export default diff;