highlighter = function (md, str, lang) {
	let result = "";
	if (lang) {
		try {
			loadLanguages([lang]);
			result = Prism.highlight(str, Prism.languages[lang], lang);
		} catch (err) {
			console.log(lang, err);
			// we still want to wrap the result later
			result = md.utils.escapeHtml(str);
		}
	} else {
		result = md.utils.escapeHtml(str);
	}

	return `<pre class="language-${lang}"><code>${result}</code></pre>`;
}
@param {MarkdownIt} md markdown-it
@param {string} str code
@param {string} lang code language
@returns {string} highlighted result wrapped in pre