hikaru-coffee
Version:
A static site generator that generates routes based on directories naturally.
91 lines (81 loc) • 2.55 kB
JavaScript
// Generated by CoffeeScript 2.3.1
(function() {
var Promise, aliases, escapeHTML, highlight, highlightAuto, hljs, loadLangAliases;
hljs = require("highlight.js");
({escapeHTML} = require("./utils"));
Promise = require("bluebird");
aliases = null;
loadLangAliases = function() {
var alias, j, k, lAliases, lang, len, len1, ref;
aliases = {
"plain": "plain"
};
ref = hljs.listLanguages();
for (j = 0, len = ref.length; j < len; j++) {
lang = ref[j];
aliases[lang] = lang;
lAliases = require(`highlight.js/lib/languages/${lang}`)(hljs)["aliases"];
if (lAliases != null) {
for (k = 0, len1 = lAliases.length; k < len1; k++) {
alias = lAliases[k];
aliases[alias] = lang;
}
}
}
return aliases;
};
highlightAuto = function(str) {
var alias, data, j, lang, len;
for (lang = j = 0, len = aliases.length; j < len; lang = ++j) {
alias = aliases[lang];
if (hljs.getLanguage(lang) == null) {
hljs.registerLanguage(lang, require(`highlight.js/lib/languages/${lang}`));
}
}
data = hljs.highlightAuto(str);
if (data["relevance"] > 0 && data["language"]) {
return data;
}
return {
"value": escapeHTML(str),
"language": "plain"
};
};
highlight = function(str, options = {}) {
var data, gutters, i, j, lines, ref, results;
if (aliases == null) {
aliases = loadLangAliases();
}
if (options["hljs"]) {
hljs.configure({
"classPrefix": "hljs-"
});
}
options["lang"] = aliases[options["lang"]];
if (options["lang"] == null) {
data = highlightAuto(str);
} else if (options["lang"] === "plain") {
data = {
"value": escapeHTML(str),
"language": "plain"
};
} else {
data = hljs.highlight(options["lang"], str);
}
results = [`<figure class="highlight hljs ${data["language"].toLowerCase()}">`];
if (options["gutter"]) {
gutters = ["<pre class=\"gutter\">"];
lines = data["value"].split("\n").length;
for (i = j = 0, ref = lines; (0 <= ref ? j < ref : j > ref); i = 0 <= ref ? ++j : --j) {
gutters.push(`<span class="line">${i + 1}</span>\n`);
}
gutters.push("</pre>");
results = results.concat(gutters);
}
results.push("<pre class=\"code\"><code>");
results.push(data["value"]);
results.push("</code></pre></figure>");
return results.join("");
};
module.exports = highlight;
}).call(this);