diff options
Diffstat (limited to 'public/prism/prism-latte.js')
| -rw-r--r-- | public/prism/prism-latte.js | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/public/prism/prism-latte.js b/public/prism/prism-latte.js new file mode 100644 index 0000000..dbf91bb --- /dev/null +++ b/public/prism/prism-latte.js @@ -0,0 +1,72 @@ +(function (Prism) { + Prism.languages.latte = { + comment: /^\{\*[\s\S]*/, + 'latte-tag': { + // https://latte.nette.org/en/tags + pattern: /(^\{(?:\/(?=[a-z]))?)(?:[=_]|[a-z]\w*\b(?!\())/i, + lookbehind: true, + alias: 'important', + }, + delimiter: { + pattern: /^\{\/?|\}$/, + alias: 'punctuation', + }, + php: { + pattern: /\S(?:[\s\S]*\S)?/, + alias: 'language-php', + inside: Prism.languages.php, + }, + }; + + var markupLatte = Prism.languages.extend('markup', {}); + Prism.languages.insertBefore( + 'inside', + 'attr-value', + { + 'n-attr': { + pattern: /n:[\w-]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+))?/, + inside: { + 'attr-name': { + pattern: /^[^\s=]+/, + alias: 'important', + }, + 'attr-value': { + pattern: /=[\s\S]+/, + inside: { + punctuation: [ + /^=/, + { + pattern: /^(\s*)["']|["']$/, + lookbehind: true, + }, + ], + php: { + pattern: /\S(?:[\s\S]*\S)?/, + inside: Prism.languages.php, + }, + }, + }, + }, + }, + }, + markupLatte.tag + ); + + Prism.hooks.add('before-tokenize', function (env) { + if (env.language !== 'latte') { + return; + } + var lattePattern = + /\{\*[\s\S]*?\*\}|\{[^'"\s{}*](?:[^"'/{}]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|\/\*(?:[^*]|\*(?!\/))*\*\/)*\}/g; + Prism.languages['markup-templating'].buildPlaceholders( + env, + 'latte', + lattePattern + ); + env.grammar = markupLatte; + }); + + Prism.hooks.add('after-tokenize', function (env) { + Prism.languages['markup-templating'].tokenizePlaceholders(env, 'latte'); + }); +})(Prism); |
