import embeddedLanguages from '../embeddedLanguages.mjs';
import {merge} from '../util.mjs';

const elements = merge(embeddedLanguages.map(embeddedLanguage => ({
	[`tagged-template-literal-block-${embeddedLanguage.id}`]: {
		begin: `(${embeddedLanguage.id})(\`)`,
		end: '`',
		beginCaptures: {
			1: {
				name:
					'entity.name.function.tagged-template.js entity.name.embedded-language',
			},
			2: {
				name:
					'string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin',
			},
		},
		endCaptures: {
			0: {
				name:
					'string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end',
			},
		},
		contentName: embeddedLanguage.embedScopeBlock,
		patterns: [
			{
				include: embeddedLanguage.sourceScope,
			},
		],
	},
})));

export default {
	scopeName: 'embedded-string-highlighting.injection',
	injectionSelector: 'L:source.js -string -comment',
	repository: elements,
	patterns: Object.keys(elements).map(ruleKey => ({
		include: `#${ruleKey}`,
	})),
};