Autoloader: Added support for aliases (#1829) This adds alias support for the Autoloader plugin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
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