'use strict';

const javascript = require('./javascript.cjs');
const markupTemplating = require('./markup-templating.cjs');

// @ts-nocheck
/**
 * @import {Refractor} from '../lib/core.js'
 */
ejs.displayName = 'ejs';
ejs.aliases = ['eta'];

/** @param {Refractor} Prism */
function ejs(Prism) {
  Prism.register(javascript);
  Prism.register(markupTemplating)
  ;(function (Prism) {
    Prism.languages.ejs = {
      delimiter: {
        pattern: /^<%[-_=]?|[-_]?%>$/,
        alias: 'punctuation'
      },
      comment: /^#[\s\S]*/,
      'language-javascript': {
        pattern: /[\s\S]+/,
        inside: Prism.languages.javascript
      }
    };
    Prism.hooks.add('before-tokenize', function (env) {
      var ejsPattern = /<%(?!%)[\s\S]+?%>/g;
      Prism.languages['markup-templating'].buildPlaceholders(
        env,
        'ejs',
        ejsPattern
      );
    });
    Prism.hooks.add('after-tokenize', function (env) {
      Prism.languages['markup-templating'].tokenizePlaceholders(env, 'ejs');
    });
    Prism.languages.eta = Prism.languages.ejs;
  })(Prism);
}

module.exports = ejs;
