UNPKG

refractor

Version:

Lightweight, robust, elegant virtual syntax highlighting using Prism

86 lines (84 loc) 2.38 kB
// @ts-nocheck /** * @import {Refractor} from '../lib/core.js' */ import refractorClike from './clike.js' import refractorMarkupTemplating from './markup-templating.js' import refractorPhp from './php.js' latte.displayName = 'latte' latte.aliases = [] /** @param {Refractor} Prism */ export default function latte(Prism) { Prism.register(refractorClike) Prism.register(refractorMarkupTemplating) Prism.register(refractorPhp) ;(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) }