in src/grammar.ts [317:356]
constructor(initialLanguage: number, themeProvider: IThemeProvider, embeddedLanguages: IEmbeddedLanguagesMap | null) {
this._initialLanguage = initialLanguage;
this._themeProvider = themeProvider;
this._cache = new Map();
this._defaultMetaData = new ScopeMetadata(
'',
this._initialLanguage,
TemporaryStandardTokenType.Other,
[this._themeProvider.getDefaults()]
);
// embeddedLanguages handling
this._embeddedLanguages = Object.create(null);
if (embeddedLanguages) {
// If embeddedLanguages are configured, fill in `this._embeddedLanguages`
const scopes = Object.keys(embeddedLanguages);
for (let i = 0, len = scopes.length; i < len; i++) {
const scope = scopes[i];
const language = embeddedLanguages[scope];
if (typeof language !== 'number' || language === 0) {
console.warn('Invalid embedded language found at scope ' + scope + ': <<' + language + '>>');
// never hurts to be too careful
continue;
}
this._embeddedLanguages[scope] = language;
}
}
// create the regex
const escapedScopes = Object.keys(this._embeddedLanguages).map((scopeName) => ScopeMetadataProvider._escapeRegExpCharacters(scopeName));
if (escapedScopes.length === 0) {
// no scopes registered
this._embeddedLanguagesRegex = null;
} else {
escapedScopes.sort();
escapedScopes.reverse();
this._embeddedLanguagesRegex = new RegExp(`^((${escapedScopes.join(')|(')}))($|\\.)`, '');
}
}