xmitter-11ty/_src/eleventy-liquidjs-tag-highlight-prismjs.js
Zach Leatherman 14655cb1c4 Fixes #3
2018-01-22 22:53:46 -06:00

37 lines
1.0 KiB
JavaScript

const Prism = require('prismjs');
module.exports = function(liquidEngine) {
let langMap = {
"css": "css",
"html": "markup",
"js": "javascript"
};
return {
parse: function(tagToken, remainTokens) {
this.language = langMap[ tagToken.args ] || tagToken.args;
this.tokens = [];
var stream = liquidEngine.parser.parseStream(remainTokens);
stream
.on('token', token => {
if (token.name === 'endhighlight') {
stream.stop();
} else {
this.tokens.push(token);
}
})
.on('end', x => {
throw new Error("tag highlight not closed");
});
stream.start()
},
render: function(scope, hash) {
var tokens = this.tokens.map(token => token.raw).join('').trim();
var html = Prism.highlight(tokens, Prism.languages[ this.language ]);
return Promise.resolve(`<pre class="language-${this.language}"><code class="language-${this.language}">` + html + "</code></pre>");
}
}
};