|
@@ -1,28 +1,35 @@
|
|
|
var Prism = require('prismjs');
|
|
|
-var cheerio = require('cheerio');
|
|
|
var path = require('path');
|
|
|
|
|
|
var prismCSS = require.resolve('prismjs/themes/prism.css');
|
|
|
|
|
|
+var DEFAULT_LANGUAGE = 'javascript';
|
|
|
+var MAP_LANGUAGES = {
|
|
|
+ 'py': 'python',
|
|
|
+ 'js': 'javascript',
|
|
|
+ 'json': 'javascript',
|
|
|
+ 'rb': 'ruby',
|
|
|
+ 'csharp': 'cs',
|
|
|
+};
|
|
|
+
|
|
|
+var assets = {
|
|
|
+ assets: path.dirname(prismCSS),
|
|
|
+ css: [path.basename(prismCSS)]
|
|
|
+};
|
|
|
+
|
|
|
module.exports = {
|
|
|
- book: {
|
|
|
- assets: path.dirname(prismCSS),
|
|
|
- css: [path.basename(prismCSS)]
|
|
|
- },
|
|
|
- hooks: {
|
|
|
- page: function (page) {
|
|
|
- page.sections.forEach(function (section) {
|
|
|
- var $ = cheerio.load(section.content);
|
|
|
+ book: assets,
|
|
|
+ ebook: assets,
|
|
|
+ blocks: {
|
|
|
+ code: function(block) {
|
|
|
+ // Normalize language id
|
|
|
+ var lang = block.kwargs.language || DEFAULT_LANGUAGE;
|
|
|
+ lang = MAP_LANGUAGES[lang] || lang;
|
|
|
|
|
|
- $('code').each(function() {
|
|
|
- var text = $(this).text();
|
|
|
- var highlighted = Prism.highlight(text, Prism.languages.javascript);
|
|
|
- $(this).html(highlighted);
|
|
|
- });
|
|
|
+ // Get languages from prism
|
|
|
+ lang = Prism.languages[lang] || Prism.languages[DEFAULT_LANGUAGE];
|
|
|
|
|
|
- section.content = $.html();
|
|
|
- });
|
|
|
- return page;
|
|
|
+ return Prism.highlight(block.body, lang);
|
|
|
}
|
|
|
}
|
|
|
-};
|
|
|
+};
|