Sto cercando di utilizzare PageDown sul lato client come editor e sul lato server per analizzare quindi Markdown in HTML.PageDown tramite ScriptEngine che analizza erroneamente Markdown
Sembra funzionare bene sul lato client, ma sul lato server, i segni di spunta stanno solo "codificando" il carattere che segue, non la parola che avvolge. Quindi, se faccio questo:
test `test` test
mi aspetto che questo, e questo è davvero quello che ottengo sul lato client:
test <code>test</code> test
Ma sul lato server, che finiscono per essere questo, invece:
test <code>t</code>est<code> </code>test
ho creato un file chiamato pageDown.js
, che è semplicemente Markdown.Converter.js
e Markdown.Sanitizer.js
combinati in un unico file, con questa funzione ha aggiunto:
function getSanitizedHtml(pagedown){
var converter = new Markdown.getSanitizingConverter();
return converter.makeHtml(pagedown);
}
Sul lato client, posso utilizzare questo file in questo modo:
<!DOCTYPE html>
<html>
<head>
<script src="pageDown.js"></script>
<script>
function convert(){
var html = getSanitizedHtml("test `test` test");
console.log(html);
document.getElementById("content").innerHTML = html;
}
</script>
</head>
<body onload="convert()">
<p id="content"></p>
</body>
</html>
che visualizza correttamente: <p>test <code>test</code> test</p>
Sul (Java) lato server, io uso questo stesso file esatto, attraverso il Java di ScriptEngineManager
e Invocable
:
import java.io.InputStreamReader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class PageDownTest{
public static void main(String... args){
try{
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
engine.eval(new InputStreamReader(PageDownTest.class.getResourceAsStream("pageDown.js")));
Invocable inv = (Invocable) engine;
String s = String.valueOf(inv.invokeFunction("getSanitizedHtml", "test `test` test"));
System.out.println(s);
}
catch(Exception e){
e.printStackTrace();
}
}
}
Questo programma stampa questa: <p>test <code>t</code>est<code></code>test</p>
vedo problemi simili con altre Markdown: test **test** test
ignora semplicemente la parte **
. Tuttavia, ##test
restituisce correttamente come <h2>test</h2>
.
Questo funziona perfettamente se si passa al JavaScript direttamente tramite HTML, ma non quando passo attraverso Java. Cosa sta succedendo qui? Devo gestire Markdown sul server in modo diverso?
Il wiki del progetto menziona l'utilizzo di Node.JS sul server, questa è l'ultima risorsa. – approxiblue
Non sono sicuro del motivo per cui questa domanda ha una taglia. L'unica risposta afferma chiaramente che il problema è un bug nella libreria utilizzata. Il bug dovrebbe essere segnalato a monte ai manutentori di quella libreria. Non c'è nient'altro che possiamo fare qui per aiutare. – Waylan
@Waylan La taglia è stata aggiunta ** prima ** della risposta. L'unica ragione per cui la risposta è stata pubblicata era perché ho aggiunto la taglia. Ecco come funzionano le taglie. –