Skip to content

Commit 52889b5

Browse files
Autoloader: Added support for aliases (#1829)
This adds alias support for the Autoloader plugin.
1 parent 8d28c74 commit 52889b5

File tree

4 files changed

+44
-25
lines changed

4 files changed

+44
-25
lines changed

gulpfile.js

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ function languagePlugins(cb) {
9494
componentsPromise.then(data => {
9595
const languagesMap = {};
9696
const dependenciesMap = {};
97+
const aliasMap = {};
9798

9899
/**
99100
* Tries to guess the name of a language given its id.
@@ -116,38 +117,48 @@ function languagePlugins(cb) {
116117
}
117118
}
118119

119-
for (const p in data.languages) {
120-
if (p !== 'meta') {
121-
const title = data.languages[p].displayTitle || data.languages[p].title;
120+
for (const id in data.languages) {
121+
if (id !== 'meta') {
122+
const language = data.languages[id];
123+
const title = language.displayTitle || language.title;
122124

123-
addLanguageTitle(p, title);
125+
addLanguageTitle(id, title);
124126

125-
for (const name in data.languages[p].aliasTitles) {
126-
addLanguageTitle(name, data.languages[p].aliasTitles[name]);
127+
for (const name in language.aliasTitles) {
128+
addLanguageTitle(name, language.aliasTitles[name]);
127129
}
128130

129-
if (data.languages[p].alias) {
130-
if (typeof data.languages[p].alias === 'string') {
131-
addLanguageTitle(data.languages[p].alias, title);
131+
if (language.alias) {
132+
if (typeof language.alias === 'string') {
133+
aliasMap[language.alias] = id;
134+
addLanguageTitle(language.alias, title);
132135
} else {
133-
data.languages[p].alias.forEach(function (alias) {
136+
language.alias.forEach(function (alias) {
137+
aliasMap[alias] = id;
134138
addLanguageTitle(alias, title);
135139
});
136140
}
137141
}
138142

139-
if (data.languages[p].require) {
140-
dependenciesMap[p] = data.languages[p].require;
143+
if (language.require) {
144+
dependenciesMap[id] = language.require;
141145
}
142146
}
143147
}
144148

145149
const jsonLanguagesMap = JSON.stringify(languagesMap);
146150
const jsonDependenciesMap = JSON.stringify(dependenciesMap);
151+
const jsonAliasMap = JSON.stringify(aliasMap);
147152

148153
const tasks = [
149-
{ plugin: paths.showLanguagePlugin, map: jsonLanguagesMap },
150-
{ plugin: paths.autoloaderPlugin, map: jsonDependenciesMap }
154+
{
155+
plugin: paths.showLanguagePlugin,
156+
maps: { languages: jsonLanguagesMap}
157+
},
158+
{
159+
plugin: paths.autoloaderPlugin,
160+
maps: { aliases: jsonAliasMap, dependencies: jsonDependenciesMap }
161+
}
151162
];
152163

153164
let cpt = 0;
@@ -162,8 +173,8 @@ function languagePlugins(cb) {
162173
for (const task of tasks) {
163174
const stream = src(task.plugin)
164175
.pipe(replace(
165-
/\/\*languages_placeholder\[\*\/[\s\S]*?\/\*\]\*\//,
166-
'/*languages_placeholder[*/' + task.map + '/*]*/'
176+
/\/\*(\w+)_placeholder\[\*\/[\s\S]*?\/\*\]\*\//g,
177+
(m, mapName) => `/*${mapName}_placeholder[*/${task.maps[mapName]}/*]*/`
167178
))
168179
.pipe(dest(task.plugin.substring(0, task.plugin.lastIndexOf('/'))));
169180

plugins/autoloader/index.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ <h1>Examples</h1>
109109
<p>Basic usage with some Perl code:</p>
110110
<pre><code class="language-perl">my ($class, $filename) = @_;</code></pre>
111111

112+
<p>Alias support with TypeScript's <code class="language-none">ts</code>:</p>
113+
<pre><code class="language-ts">const a: number = 0;</code></pre>
114+
112115
<p>The Less filter used in Pug:</p>
113116
<pre><code class="language-pug" data-dependencies="less">:less
114117
foo {

plugins/autoloader/prism-autoloader.js

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
}
55

66
// The dependencies map is built automatically with gulp
7-
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"}/*]*/;
7+
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"}/*]*/;
8+
9+
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"}/*]*/;
810

911
var lang_data = {};
1012

@@ -65,6 +67,10 @@
6567
* @param {HTMLElement} elt
6668
*/
6769
var registerElement = function (lang, elt) {
70+
if (lang in lang_aliases) {
71+
lang = lang_aliases[lang];
72+
}
73+
6874
var data = lang_data[lang];
6975
if (!data) {
7076
data = lang_data[lang] = {};
@@ -123,14 +129,12 @@
123129
* @param {function=} error
124130
*/
125131
var loadLanguage = function (lang, success, error) {
126-
var load = function () {
127-
var force = false;
128-
// Do we want to force reload the grammar?
129-
if (lang.indexOf('!') >= 0) {
130-
force = true;
131-
lang = lang.replace('!', '');
132-
}
132+
var force = lang.indexOf('!') >= 0;
133+
134+
lang = lang.replace('!', '');
135+
lang = lang_aliases[lang] || lang;
133136

137+
var load = function () {
134138
var data = lang_data[lang];
135139
if (!data) {
136140
data = lang_data[lang] = {};
@@ -166,6 +170,7 @@
166170
});
167171
}
168172
};
173+
169174
var dependencies = lang_dependencies[lang];
170175
if(dependencies && dependencies.length) {
171176
loadLanguages(dependencies, load);

plugins/autoloader/prism-autoloader.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)