69 lines
1.6 KiB
JavaScript
69 lines
1.6 KiB
JavaScript
(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));
|