(function (Prism) { var interpolation = /\\\((?:[^()]|\([^()]*\))*\)/.source; var string = RegExp(/(^|[^\\])"(?:[^"\r\n\\]|\\[^\r\n(]|__)*"/.source.replace(/__/g, function () { return interpolation; })); var stringInterpolation = { 'interpolation': { pattern: RegExp(/((?:^|[^\\])(?:\\{2})*)/.source + interpolation), lookbehind: true, inside: { 'content': { pattern: /^(\\\()[\s\S]+(?=\)$)/, lookbehind: true, inside: null // see below }, 'punctuation': /^\\\(|\)$/ } } }; var jq = Prism.languages.jq = { 'comment': /#.*/, 'property': { pattern: RegExp(string.source + /(?=\s*:(?!:))/.source), lookbehind: true, greedy: true, inside: stringInterpolation }, 'string': { pattern: string, lookbehind: true, greedy: true, inside: stringInterpolation }, 'function': { pattern: /(\bdef\s+)[a-z_]\w+/i, lookbehind: true }, 'variable': /\B\$\w+/, 'property-literal': { pattern: /\b[a-z_]\w*(?=\s*:(?!:))/i, alias: 'property' }, 'keyword': /\b(?:as|break|catch|def|elif|else|end|foreach|if|import|include|label|module|modulemeta|null|reduce|then|try|while)\b/, 'boolean': /\b(?:false|true)\b/, 'number': /(?:\b\d+\.|\B\.)?\b\d+(?:[eE][+-]?\d+)?\b/, 'operator': [ { pattern: /\|=?/, alias: 'pipe' }, /\.\.|[!=<>]?=|\?\/\/|\/\/=?|[-+*/%]=?|[<>?]|\b(?:and|not|or)\b/ ], 'c-style-function': { pattern: /\b[a-z_]\w*(?=\s*\()/i, alias: 'function' }, 'punctuation': /::|[()\[\]{},:;]|\.(?=\s*[\[\w$])/, 'dot': { pattern: /\./, alias: 'important' } }; stringInterpolation.interpolation.inside.content.inside = jq; }(Prism));