Index: lib/src/prism/gulpfile.js |
diff --git a/lib/src/prism/gulpfile.js b/lib/src/prism/gulpfile.js |
index 25de6e500dfa33f610a39aea3fe9917b03b6e13e..25757dba5c5b28462f3514ac02d4e45013330e34 100644 |
--- a/lib/src/prism/gulpfile.js |
+++ b/lib/src/prism/gulpfile.js |
@@ -3,8 +3,11 @@ var gulp = require('gulp'), |
uglify = require('gulp-uglify'), |
header = require('gulp-header'), |
concat = require('gulp-concat'), |
+ replace = require('gulp-replace'), |
+ fs = require('fs'), |
paths = { |
+ componentsFile: 'components.js', |
components: ['components/**/*.js', '!components/**/*.min.js'], |
main: [ |
'components/prism-core.js', |
@@ -14,7 +17,9 @@ var gulp = require('gulp'), |
'components/prism-javascript.js', |
'plugins/file-highlight/prism-file-highlight.js' |
], |
- plugins: ['plugins/**/*.js', '!plugins/**/*.min.js'] |
+ plugins: ['plugins/**/*.js', '!plugins/**/*.min.js'], |
+ showLanguagePlugin: 'plugins/show-language/prism-show-language.js', |
+ autoloaderPlugin: 'plugins/autoloader/prism-autoloader.js' |
}; |
gulp.task('components', function() { |
@@ -33,7 +38,7 @@ gulp.task('build', function() { |
.pipe(gulp.dest('./')); |
}); |
-gulp.task('plugins', function() { |
+gulp.task('plugins', ['languages-plugins'], function() { |
return gulp.src(paths.plugins) |
.pipe(uglify()) |
.pipe(rename({ suffix: '.min' })) |
@@ -45,4 +50,67 @@ gulp.task('watch', function() { |
gulp.watch(paths.plugins, ['plugins', 'build']); |
}); |
+gulp.task('languages-plugins', function (cb) { |
+ fs.readFile(paths.componentsFile, { |
+ encoding: 'utf-8' |
+ }, function (err, data) { |
+ if (!err) { |
+ data = data.replace(/^var\s+components\s*=\s*|;\s*$/g, ''); |
+ try { |
+ data = JSON.parse(data); |
+ |
+ var languagesMap = {}; |
+ var dependenciesMap = {}; |
+ for (var p in data.languages) { |
+ if (p !== 'meta') { |
+ var title = data.languages[p].displayTitle || data.languages[p].title; |
+ var ucfirst = p.substring(0, 1).toUpperCase() + p.substring(1); |
+ if (title !== ucfirst) { |
+ languagesMap[p] = title; |
+ } |
+ |
+ if(data.languages[p].require) { |
+ dependenciesMap[p] = data.languages[p].require; |
+ } |
+ } |
+ } |
+ |
+ var jsonLanguagesMap = JSON.stringify(languagesMap); |
+ var jsonDependenciesMap = JSON.stringify(dependenciesMap); |
+ |
+ var tasks = [ |
+ {plugin: paths.showLanguagePlugin, map: jsonLanguagesMap}, |
+ {plugin: paths.autoloaderPlugin, map: jsonDependenciesMap} |
+ ]; |
+ |
+ var cpt = 0; |
+ var l = tasks.length; |
+ var done = function() { |
+ cpt++; |
+ if(cpt === l) { |
+ cb && cb(); |
+ } |
+ }; |
+ |
+ tasks.forEach(function(task) { |
+ var stream = gulp.src(task.plugin) |
+ .pipe(replace( |
+ /\/\*languages_placeholder\[\*\/[\s\S]*?\/\*\]\*\//, |
+ '/*languages_placeholder[*/' + task.map + '/*]*/' |
+ )) |
+ .pipe(gulp.dest(task.plugin.substring(0, task.plugin.lastIndexOf('/')))); |
+ |
+ stream.on('error', done); |
+ stream.on('end', done); |
+ }); |
+ |
+ } catch (e) { |
+ cb(e); |
+ } |
+ } else { |
+ cb(err); |
+ } |
+ }); |
+}); |
+ |
gulp.task('default', ['components', 'plugins', 'build']); |