languagePluginLoader.then(() => { // pyodide is now ready to use... pyodide.loadPackage('Pygments').then(() => { pyodide.runPython('import pygments.lexers, pygments.formatters.html, pygments.styles'); var lexerlist = pyodide.runPython('list(pygments.lexers.get_all_lexers())'); var sel = document.getElementById("lang"); for (lex of lexerlist) { var opt = document.createElement("option"); opt.text = lex[0]; opt.value = lex[1][0]; sel.add(opt); } var stylelist = pyodide.runPython('list(pygments.styles.get_all_styles())'); var sel = document.getElementById("style"); for (sty of stylelist) { if (sty != "default") { var opt = document.createElement("option"); opt.text = sty; opt.value = sty; sel.add(opt); } } document.getElementById("hlbtn").disabled = false; document.getElementById("loading").style.display = "none"; }); }); function new_file() { pyodide.globals['fname'] = document.getElementById("file").files[0].name; var alias = pyodide.runPython('pygments.lexers.find_lexer_class_for_filename(fname).aliases[0]'); var sel = document.getElementById("lang"); for (var i = 0; i < sel.length; i++) { if (sel.options[i].value == alias) { sel.selectedIndex = i; reset_err_hl(); break; } } } function reset_err_hl() { document.getElementById("aroundlang").style.backgroundColor = null; } function highlight() { var select = document.getElementById("lang"); var alias = select.options.item(select.selectedIndex).value if (alias == "") { document.getElementById("aroundlang").style.backgroundColor = "#ffcccc"; return; } pyodide.globals['alias'] = alias; var select = document.getElementById("style"); pyodide.globals['style'] = select.options.item(select.selectedIndex).value; pyodide.runPython('lexer = pygments.lexers.get_lexer_by_name(alias)'); pyodide.runPython('fmter = pygments.formatters.html.HtmlFormatter(noclasses=True, style=style)'); var file = document.getElementById("file").files[0]; if (file) { file.arrayBuffer().then(function(buf) { pyodide.globals['code_mem'] = buf; pyodide.runPython('code = bytes(code_mem)'); highlight_now(); }); } else { pyodide.globals['code'] = document.getElementById("code").value; highlight_now(); } } function highlight_now() { var out = document.getElementById("hlcode"); out.innerHTML = pyodide.runPython('pygments.highlight(code, lexer, fmter)'); document.location.hash = "#try"; document.getElementById("hlcodedl").style.display = "block"; } function download_code() { var filename = "highlighted.html"; var hlcode = document.getElementById("hlcode").innerHTML; var blob = new Blob([hlcode], {type: 'text/html'}); if (window.navigator.msSaveOrOpenBlob) { window.navigator.msSaveBlob(blob, filename); } else{ var elem = window.document.createElement('a'); elem.href = window.URL.createObjectURL(blob); elem.download = filename; document.body.appendChild(elem); elem.click(); document.body.removeChild(elem); window.URL.revokeObjectURL(elem.href); } }