Commit 52889b5b77a248300456e1a5a49a071075e6358e

Michael Schmidt 2019-03-24T18:52:44

Autoloader: Added support for aliases (#1829) This adds alias support for the Autoloader plugin.

diff --git a/gulpfile.js b/gulpfile.js
index 0e1a88e..4afcc4b 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 4889388..c45ea87 100644
--- a/plugins/autoloader/index.html
+++ b/plugins/autoloader/index.html
@@ -109,6 +109,9 @@
 	<p>Basic usage with some Perl code:</p>
 	<pre><code class="language-perl">my ($class, $filename) = @_;</code></pre>
 
+	<p>Alias support with TypeScript's <code class="language-none">ts</code>:</p>
+	<pre><code class="language-ts">const a: number = 0;</code></pre>
+
 	<p>The Less filter used in Pug:</p>
 	<pre><code class="language-pug" data-dependencies="less">:less
 	foo {
diff --git a/plugins/autoloader/prism-autoloader.js b/plugins/autoloader/prism-autoloader.js
index 9722d9b..6d5f442 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 e26163a..ccf046b 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<t.length&&!/^[a-z]+:\/\//i.test(a.src)&&(e=t.replace(/\/?$/,"/"))}else/[\w-]+\.js$/.test(a.src)&&(e=a.src.replace(/[\w-]+\.js$/,"components/"));var u=Prism.plugins.autoloader={languages_path:e,use_minified:!0},s=function(a,e,c){"string"==typeof a&&(a=[a]);var t=0,s=a.length,r=function(){t<s?i(a[t],function(){t++,r()},function(){c&&c(a[t])}):t===s&&e&&e(a)};r()},i=function(l,n,p){var a=function(){var a=!1;0<=l.indexOf("!")&&(a=!0,l=l.replace("!",""));var e,c,t,s,r=o[l];if(r||(r=o[l]={}),n&&(r.success_callbacks||(r.success_callbacks=[]),r.success_callbacks.push(n)),p&&(r.error_callbacks||(r.error_callbacks=[]),r.error_callbacks.push(p)),!a&&Prism.languages[l])m(l);else if(!a&&r.error)k(l);else if(a||!r.loading){r.loading=!0;var i=u.languages_path+"prism-"+l+(u.use_minified?".min":"")+".js";e=i,c=function(){r.loading=!1,m(l)},t=function(){r.loading=!1,r.error=!0,k(l)},(s=document.createElement("script")).src=e,s.async=!0,s.onload=function(){document.body.removeChild(s),c&&c()},s.onerror=function(){document.body.removeChild(s),t&&t()},document.body.appendChild(s)}},e=c[l];e&&e.length?s(e,a):a()},m=function(e){o[e]&&o[e].success_callbacks&&o[e].success_callbacks.length&&o[e].success_callbacks.forEach(function(a){a(e)})},k=function(e){o[e]&&o[e].error_callbacks&&o[e].error_callbacks.length&&o[e].error_callbacks.forEach(function(a){a(e)})};Prism.hooks.add("complete",function(a){a.element&&a.language&&!a.grammar&&"none"!==a.language&&function(a,e){var c=o[a];c||(c=o[a]={});var t=e.getAttribute("data-dependencies");!t&&e.parentNode&&"pre"===e.parentNode.tagName.toLowerCase()&&(t=e.parentNode.getAttribute("data-dependencies")),t=t?t.split(/\s*,\s*/g):[],s(t,function(){i(a,function(){Prism.highlightElement(e)})})}(a.language,a.element)})}}();
\ No newline at end of file
+!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"},t={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"},o={},a=document.getElementsByTagName("script"),e="components/";if((a=a[a.length-1]).hasAttribute("data-autoloader-path")){var s=a.getAttribute("data-autoloader-path").trim();0<s.length&&!/^[a-z]+:\/\//i.test(a.src)&&(e=s.replace(/\/?$/,"/"))}else/[\w-]+\.js$/.test(a.src)&&(e=a.src.replace(/[\w-]+\.js$/,"components/"));var u=Prism.plugins.autoloader={languages_path:e,use_minified:!0},r=function(a,e,c){"string"==typeof a&&(a=[a]);var s=0,t=a.length,r=function(){s<t?i(a[s],function(){s++,r()},function(){c&&c(a[s])}):s===t&&e&&e(a)};r()},i=function(l,n,p){var a=function(){var a=!1;0<=l.indexOf("!")&&(a=!0,l=l.replace("!",""));var e,c,s,t,r=o[l];if(r||(r=o[l]={}),n&&(r.success_callbacks||(r.success_callbacks=[]),r.success_callbacks.push(n)),p&&(r.error_callbacks||(r.error_callbacks=[]),r.error_callbacks.push(p)),!a&&Prism.languages[l])m(l);else if(!a&&r.error)k(l);else if(a||!r.loading){r.loading=!0;var i=u.languages_path+"prism-"+l+(u.use_minified?".min":"")+".js";e=i,c=function(){r.loading=!1,m(l)},s=function(){r.loading=!1,r.error=!0,k(l)},(t=document.createElement("script")).src=e,t.async=!0,t.onload=function(){document.body.removeChild(t),c&&c()},t.onerror=function(){document.body.removeChild(t),s&&s()},document.body.appendChild(t)}},e=c[l];e&&e.length?r(e,a):a()},m=function(e){o[e]&&o[e].success_callbacks&&o[e].success_callbacks.length&&o[e].success_callbacks.forEach(function(a){a(e)})},k=function(e){o[e]&&o[e].error_callbacks&&o[e].error_callbacks.length&&o[e].error_callbacks.forEach(function(a){a(e)})};Prism.hooks.add("complete",function(a){a.element&&a.language&&!a.grammar&&"none"!==a.language&&function(a,e){a in t&&(a=t[a]);var c=o[a];c||(c=o[a]={});var s=e.getAttribute("data-dependencies");!s&&e.parentNode&&"pre"===e.parentNode.tagName.toLowerCase()&&(s=e.parentNode.getAttribute("data-dependencies")),s=s?s.split(/\s*,\s*/g):[],r(s,function(){i(a,function(){Prism.highlightElement(e)})})}(a.language,a.element)})}}();
\ No newline at end of file