reprism
Version:
Modular Syntax highlighting for the web
78 lines (73 loc) • 2.18 kB
JavaScript
export default {
language: 'velocity',
init: Prism => {
(function (Prism) {
Prism.languages.velocity = Prism.languages.extend('markup', {})
const velocity = {
variable: {
pattern: /(^|[^\\](?:\\\\)*)\$!?(?:[a-z][\w-]*(?:\([^)]*\))?(?:\.[a-z][\w-]*(?:\([^)]*\))?|\[[^\]]+])*|{[^}]+})/i,
lookbehind: true,
inside: {}, // See below
},
string: {
pattern: /"[^"]*"|'[^']*'/,
greedy: true,
},
number: /\b\d+\b/,
boolean: /\b(?:true|false)\b/,
operator: /[=!<>]=?|[+*/%-]|&&|\|\||\.\.|\b(?:eq|g[et]|l[et]|n(?:e|ot))\b/,
punctuation: /[(){}[\]:,.]/,
}
velocity.variable.inside = {
string: velocity.string,
function: {
pattern: /([^\w-])[a-z][\w-]*(?=\()/,
lookbehind: true,
},
number: velocity.number,
boolean: velocity.boolean,
punctuation: velocity.punctuation,
}
Prism.languages.insertBefore('velocity', 'comment', {
unparsed: {
pattern: /(^|[^\\])#\[\[[\s\S]*?]]#/,
lookbehind: true,
greedy: true,
inside: {
punctuation: /^#\[\[|]]#$/,
},
},
'velocity-comment': [
{
pattern: /(^|[^\\])#\*[\s\S]*?\*#/,
lookbehind: true,
greedy: true,
alias: 'comment',
},
{
pattern: /(^|[^\\])##.*/,
lookbehind: true,
greedy: true,
alias: 'comment',
},
],
directive: {
pattern: /(^|[^\\](?:\\\\)*)#@?(?:[a-z][\w-]*|{[a-z][\w-]*})(?:\s*\((?:[^()]|\([^()]*\))*\))?/i,
lookbehind: true,
inside: {
keyword: {
pattern: /^#@?(?:[a-z][\w-]*|{[a-z][\w-]*})|\bin\b/,
inside: {
punctuation: /[{}]/,
},
},
rest: velocity,
},
},
variable: velocity.variable,
})
Prism.languages.velocity.tag.inside['attr-value'].inside.rest =
Prism.languages.velocity
}(Prism))
},
}