Próbuję użyć PageDown po stronie klienta jako edytor, a po stronie serwera, aby następnie analizować, że Markdown do HTML.PageDown przez ScriptEngine niepoprawnie analizowania Markdown
Wygląda na to, że działa dobrze po stronie klienta, ale po stronie serwera znaczniki są tylko "kodyfikujące" znak, który następuje, a nie słowo, które zawija. Więc jeśli mogę to zrobić:
test `test` test
Oczekuję tego, i to jest rzeczywiście to, co się po stronie klienta:
test <code>test</code> test
Ale po stronie serwera, ja skończyć się coraz to zamiast:
test <code>t</code>est<code> </code>test
Został utworzony plik o nazwie pageDown.js
, który jest po prostu Markdown.Converter.js
i Markdown.Sanitizer.js
połączone w jednym pliku, z tej funkcji dodania:
function getSanitizedHtml(pagedown){
var converter = new Markdown.getSanitizingConverter();
return converter.makeHtml(pagedown);
}
Po stronie klienta, mogę użyć tego pliku tak:
<!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>
To poprawnie wyświetla: <p>test <code>test</code> test</p>
z (Java) po stronie serwera, używam to dokładnie taki sam plik, za pośrednictwem Java ScriptEngineManager
i 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();
}
}
}
Ten program wypisuje OUT: <p>test <code>t</code>est<code></code>test</p>
widzę podobne problemy z innymi obniżki: test **test** test
prostu ignoruje **
część. Jednak ##test
poprawnie zwraca jako <h2>test</h2>
.
Wszystko działa dobrze, jeśli przejdę do JavaScript bezpośrednio przez HTML, ale nie wtedy, gdy przechodzę przez Javę. Co tu się dzieje? Czy powinienem obsługiwać Markdown na serwerze w inny sposób?
Strona wiki projektu wspomina o użyciu Node.JS na serwerze, to twoja ostatnia deska ratunku. – approxiblue
Nie wiem, dlaczego to pytanie ma nagrodę. Jedyna odpowiedź wyraźnie stwierdza, że problem jest błędem w używanej bibliotece. Błąd powinien zostać zgłoszony przed opiekunami tej biblioteki. Nic więcej nie możemy zrobić, aby ci pomóc. – Waylan
@Waylan Bounty dodano ** przed ** odpowiedzią. Jedynym powodem, dla którego wysłano odpowiedź, było to, że dodałem nagrodę. Tak działają nagrody. –