diff --git a/gulpfile.js b/gulpfile.js index 0e1a88e4bb..4afcc4b012 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -94,6 +94,7 @@ function languagePlugins(cb) { componentsPromise.then(data => { const languagesMap = {}; const dependenciesMap = {}; + const aliasMap = {}; /** * Tries to guess the name of a language given its id. @@ -116,38 +117,48 @@ function languagePlugins(cb) { } } - for (const p in data.languages) { - if (p !== 'meta') { - const title = data.languages[p].displayTitle || data.languages[p].title; + for (const id in data.languages) { + if (id !== 'meta') { + const language = data.languages[id]; + const title = language.displayTitle || language.title; - addLanguageTitle(p, title); + addLanguageTitle(id, title); - for (const name in data.languages[p].aliasTitles) { - addLanguageTitle(name, data.languages[p].aliasTitles[name]); + for (const name in language.aliasTitles) { + addLanguageTitle(name, language.aliasTitles[name]); } - if (data.languages[p].alias) { - if (typeof data.languages[p].alias === 'string') { - addLanguageTitle(data.languages[p].alias, title); + if (language.alias) { + if (typeof language.alias === 'string') { + aliasMap[language.alias] = id; + addLanguageTitle(language.alias, title); } else { - data.languages[p].alias.forEach(function (alias) { + language.alias.forEach(function (alias) { + aliasMap[alias] = id; addLanguageTitle(alias, title); }); } } - if (data.languages[p].require) { - dependenciesMap[p] = data.languages[p].require; + if (language.require) { + dependenciesMap[id] = language.require; } } } const jsonLanguagesMap = JSON.stringify(languagesMap); const jsonDependenciesMap = JSON.stringify(dependenciesMap); + const jsonAliasMap = JSON.stringify(aliasMap); const tasks = [ - { plugin: paths.showLanguagePlugin, map: jsonLanguagesMap }, - { plugin: paths.autoloaderPlugin, map: jsonDependenciesMap } + { + plugin: paths.showLanguagePlugin, + maps: { languages: jsonLanguagesMap} + }, + { + plugin: paths.autoloaderPlugin, + maps: { aliases: jsonAliasMap, dependencies: jsonDependenciesMap } + } ]; let cpt = 0; @@ -162,8 +173,8 @@ function languagePlugins(cb) { for (const task of tasks) { const stream = src(task.plugin) .pipe(replace( - /\/\*languages_placeholder\[\*\/[\s\S]*?\/\*\]\*\//, - '/*languages_placeholder[*/' + task.map + '/*]*/' + /\/\*(\w+)_placeholder\[\*\/[\s\S]*?\/\*\]\*\//g, + (m, mapName) => `/*${mapName}_placeholder[*/${task.maps[mapName]}/*]*/` )) .pipe(dest(task.plugin.substring(0, task.plugin.lastIndexOf('/')))); diff --git a/plugins/autoloader/index.html b/plugins/autoloader/index.html index 4889388222..c45ea87d09 100644 --- a/plugins/autoloader/index.html +++ b/plugins/autoloader/index.html @@ -109,6 +109,9 @@

Examples

Basic usage with some Perl code:

my ($class, $filename) = @_;
+

Alias support with TypeScript's ts:

+
const a: number = 0;
+

The Less filter used in Pug:

:less
 	foo {
diff --git a/plugins/autoloader/prism-autoloader.js b/plugins/autoloader/prism-autoloader.js
index 9722d9b651..6d5f44219e 100644
--- a/plugins/autoloader/prism-autoloader.js
+++ b/plugins/autoloader/prism-autoloader.js
@@ -4,7 +4,9 @@
 	}
 
 	// The dependencies map is built automatically with gulp
-	var lang_dependencies = /*languages_placeholder[*/{"javascript":"clike","actionscript":"javascript","arduino":"cpp","aspnet":["markup","csharp"],"bison":"c","c":"clike","csharp":"clike","cpp":"c","coffeescript":"javascript","crystal":"ruby","css-extras":"css","d":"clike","dart":"clike","django":"markup-templating","ejs":["javascript","markup-templating"],"erb":["ruby","markup-templating"],"fsharp":"clike","flow":"javascript","glsl":"clike","gml":"clike","go":"clike","groovy":"clike","haml":"ruby","handlebars":"markup-templating","haxe":"clike","java":"clike","javadoc":["markup","java","javadoclike"],"jolie":"clike","jsdoc":["javascript","javadoclike"],"js-extras":"javascript","jsonp":"json","json5":"json","kotlin":"clike","less":"css","markdown":"markup","markup-templating":"markup","n4js":"javascript","nginx":"clike","objectivec":"c","opencl":"cpp","parser":"markup","php":["clike","markup-templating"],"phpdoc":["php","javadoclike"],"php-extras":"php","plsql":"sql","processing":"clike","protobuf":"clike","pug":["markup","javascript"],"qore":"clike","jsx":["markup","javascript"],"tsx":["jsx","typescript"],"reason":"clike","ruby":"clike","sass":"css","scss":"css","scala":"java","smarty":"markup-templating","soy":"markup-templating","swift":"clike","tap":"yaml","textile":"markup","tt2":["clike","markup-templating"],"twig":"markup","typescript":"javascript","t4-cs":["t4-templating","csharp"],"t4-vb":["t4-templating","visual-basic"],"vala":"clike","vbnet":"basic","velocity":"markup","wiki":"markup","xeora":"markup","xquery":"markup"}/*]*/;
+	var lang_dependencies = /*dependencies_placeholder[*/{"javascript":"clike","actionscript":"javascript","arduino":"cpp","aspnet":["markup","csharp"],"bison":"c","c":"clike","csharp":"clike","cpp":"c","coffeescript":"javascript","crystal":"ruby","css-extras":"css","d":"clike","dart":"clike","django":"markup-templating","ejs":["javascript","markup-templating"],"erb":["ruby","markup-templating"],"fsharp":"clike","flow":"javascript","glsl":"clike","gml":"clike","go":"clike","groovy":"clike","haml":"ruby","handlebars":"markup-templating","haxe":"clike","java":"clike","javadoc":["markup","java","javadoclike"],"jolie":"clike","jsdoc":["javascript","javadoclike"],"js-extras":"javascript","jsonp":"json","json5":"json","kotlin":"clike","less":"css","markdown":"markup","markup-templating":"markup","n4js":"javascript","nginx":"clike","objectivec":"c","opencl":"cpp","parser":"markup","php":["clike","markup-templating"],"phpdoc":["php","javadoclike"],"php-extras":"php","plsql":"sql","processing":"clike","protobuf":"clike","pug":["markup","javascript"],"qore":"clike","jsx":["markup","javascript"],"tsx":["jsx","typescript"],"reason":"clike","ruby":"clike","sass":"css","scss":"css","scala":"java","smarty":"markup-templating","soy":"markup-templating","swift":"clike","tap":"yaml","textile":"markup","tt2":["clike","markup-templating"],"twig":"markup","typescript":"javascript","t4-cs":["t4-templating","csharp"],"t4-vb":["t4-templating","visual-basic"],"vala":"clike","vbnet":"basic","velocity":"markup","wiki":"markup","xeora":"markup","xquery":"markup"}/*]*/;
+
+	var lang_aliases = /*aliases_placeholder[*/{"html":"markup","xml":"markup","svg":"markup","mathml":"markup","js":"javascript","adoc":"asciidoc","shell":"bash","rbfn":"bnf","dotnet":"csharp","jinja2":"django","dockerfile":"docker","gamemakerlanguage":"gml","emacs":"lisp","elisp":"lisp","emacs-lisp":"lisp","n4jsd":"n4js","objectpascal":"pascal","ts":"typescript","t4":"t4-cs","vb":"visual-basic","xeoracube":"xeora"}/*]*/;
 
 	var lang_data = {};
 
@@ -65,6 +67,10 @@
 	 * @param {HTMLElement} elt
 	 */
 	var registerElement = function (lang, elt) {
+		if (lang in lang_aliases) {
+			lang = lang_aliases[lang];
+		}
+
 		var data = lang_data[lang];
 		if (!data) {
 			data = lang_data[lang] = {};
@@ -123,14 +129,12 @@
 	 * @param {function=} error
 	 */
 	var loadLanguage = function (lang, success, error) {
-		var load = function () {
-			var force = false;
-			// Do we want to force reload the grammar?
-			if (lang.indexOf('!') >= 0) {
-				force = true;
-				lang = lang.replace('!', '');
-			}
+		var force = lang.indexOf('!') >= 0;
+
+		lang = lang.replace('!', '');
+		lang = lang_aliases[lang] || lang;
 
+		var load = function () {
 			var data = lang_data[lang];
 			if (!data) {
 				data = lang_data[lang] = {};
@@ -166,6 +170,7 @@
 				});
 			}
 		};
+
 		var dependencies = lang_dependencies[lang];
 		if(dependencies && dependencies.length) {
 			loadLanguages(dependencies, load);
diff --git a/plugins/autoloader/prism-autoloader.min.js b/plugins/autoloader/prism-autoloader.min.js
index e26163af07..ccf046bced 100644
--- a/plugins/autoloader/prism-autoloader.min.js
+++ b/plugins/autoloader/prism-autoloader.min.js
@@ -1 +1 @@
-!function(){if("undefined"!=typeof self&&self.Prism&&self.document&&document.createElement){var c={javascript:"clike",actionscript:"javascript",arduino:"cpp",aspnet:["markup","csharp"],bison:"c",c:"clike",csharp:"clike",cpp:"c",coffeescript:"javascript",crystal:"ruby","css-extras":"css",d:"clike",dart:"clike",django:"markup-templating",ejs:["javascript","markup-templating"],erb:["ruby","markup-templating"],fsharp:"clike",flow:"javascript",glsl:"clike",gml:"clike",go:"clike",groovy:"clike",haml:"ruby",handlebars:"markup-templating",haxe:"clike",java:"clike",javadoc:["markup","java","javadoclike"],jolie:"clike",jsdoc:["javascript","javadoclike"],"js-extras":"javascript",jsonp:"json",json5:"json",kotlin:"clike",less:"css",markdown:"markup","markup-templating":"markup",n4js:"javascript",nginx:"clike",objectivec:"c",opencl:"cpp",parser:"markup",php:["clike","markup-templating"],phpdoc:["php","javadoclike"],"php-extras":"php",plsql:"sql",processing:"clike",protobuf:"clike",pug:["markup","javascript"],qore:"clike",jsx:["markup","javascript"],tsx:["jsx","typescript"],reason:"clike",ruby:"clike",sass:"css",scss:"css",scala:"java",smarty:"markup-templating",soy:"markup-templating",swift:"clike",tap:"yaml",textile:"markup",tt2:["clike","markup-templating"],twig:"markup",typescript:"javascript","t4-cs":["t4-templating","csharp"],"t4-vb":["t4-templating","visual-basic"],vala:"clike",vbnet:"basic",velocity:"markup",wiki:"markup",xeora:"markup",xquery:"markup"},o={},a=document.getElementsByTagName("script"),e="components/";if((a=a[a.length-1]).hasAttribute("data-autoloader-path")){var t=a.getAttribute("data-autoloader-path").trim();0