|
|
@@ -7,7 +7,18 @@ const { log } = require('./logging'); |
|
|
|
const fs = require('fs'); |
|
|
|
|
|
|
|
|
|
|
|
const highlight = (str, lang) => { |
|
|
|
const count_lines = (str) => { |
|
|
|
let match = str.match(/\n(?!$)/g); |
|
|
|
return match ? match.length + 1 : 1; |
|
|
|
} |
|
|
|
|
|
|
|
const line_number_spans = (str) => { |
|
|
|
let count = count_lines(str); |
|
|
|
let spans = new Array(count + 1).join('<span></span>'); |
|
|
|
return `<span aria-hidden="true" class="line-numbers-rows">${spans}</span>`; |
|
|
|
} |
|
|
|
|
|
|
|
const run_prism = (str, lang) => { |
|
|
|
// TODO: so irritating |
|
|
|
if(lang in Prism.languages) { |
|
|
|
return Prism.highlight(str, Prism.languages[lang], lang); |
|
|
@@ -17,12 +28,16 @@ const highlight = (str, lang) => { |
|
|
|
if(lang in Prism.languages) { |
|
|
|
return Prism.highlight(str, Prism.languages[lang], lang); |
|
|
|
} else { |
|
|
|
console.log(`!!!!!!!!!!!!!!! Language ${lang} not found in Prism.`); |
|
|
|
return ''; |
|
|
|
// TODO: why am I doing this? |
|
|
|
return str; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const highlight = (str, lang) => { |
|
|
|
return run_prism(str, lang) + line_number_spans(str); |
|
|
|
} |
|
|
|
|
|
|
|
/* A separate renderer just for the titles that doesn't need anything else. */ |
|
|
|
const title_render = new Remarkable('full').use(rem => { |
|
|
|
let pass = (tokens, idx) => ''; |
|
|
|