मैं क्लाइंट साइड पर एक संपादक के रूप में PageDown का उपयोग करने की कोशिश कर रहा हूं, और सर्वर पक्ष पर फिर मार्कडाउन को HTML पर पार्स करने का प्रयास कर रहा हूं।स्क्रिप्टइंजिन के माध्यम से पेजडाउन गलत तरीके से पार्सिंग मार्कडाउन
यह क्लाइंट पक्ष पर ठीक काम करता प्रतीत होता है, लेकिन सर्वर की तरफ, टिकटें केवल उस चरित्र को "कोडिंग" कर रही हैं, जो शब्द इसे लपेटती है। तो अगर मैं ऐसा करते हैं:
test `test` test
मैं इस उम्मीद करते हैं, और वास्तव में यही है मैं ग्राहक पक्ष पर क्या मिलेगा:
test <code>test</code> test
लेकिन सर्वर साइड पर, मैं हो रही अंत बजाय इस:
test <code>t</code>est<code> </code>test
मैं एक फ़ाइलबुलाया बना लिया है, जो केवल Markdown.Converter.js
और Markdown.Sanitizer.js
एक एकल फाइल में संयुक्त है, इस समारोह के साथ कहा:
<!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>
सही ढंग से प्रदर्शित करता है कि:
function getSanitizedHtml(pagedown){
var converter = new Markdown.getSanitizingConverter();
return converter.makeHtml(pagedown);
}
ग्राहक पक्ष पर, मैं इस फ़ाइल इसलिए की तरह उपयोग कर सकते हैं: <p>test <code>test</code> test</p>
(जावा) सर्वर साइड पर, मैं इस एक ही सटीक फ़ाइल का उपयोग, जावा के ScriptEngineManager
और 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();
}
}
}
कि कार्यक्रम इस बाहर प्रिंट: test **test** test
बस **
भाग पर ध्यान नहीं देता: <p>test <code>t</code>est<code></code>test</p>
मैं अन्य markdown के साथ इसी तरह की समस्याओं को देखते हैं। हालांकि, ##test
सही ढंग से <h2>test</h2>
के रूप में लौटता है।
यह सब ठीक काम करता है अगर मैं जावास्क्रिप्ट पर सीधे जावास्क्रिप्ट पर जाता हूं, लेकिन जब मैं जावा से नहीं जाता हूं। यहाँ क्या चल रहा है? क्या मुझे सर्वर पर मार्कडाउन को अलग-अलग संभालना चाहिए?जब Nashorn से कहा जाता
c
:
function getSanitizedHtml(text)
{
return text.replace(/(a)(?!b)\1/gm, 'c');
}
जब के रूप में
getSanitizedHtml('aa');
यह रिटर्न ब्राउज़र में कहा जाता है:
प्रोजेक्ट विकी सर्वर पर नोड.जेएस का उपयोग करने का उल्लेख करता है, यह आपका अंतिम उपाय है। – approxiblue
यह सुनिश्चित नहीं है कि इस प्रश्न का बक्षीस क्यों है। एकमात्र उत्तर स्पष्ट रूप से बताता है कि समस्या पुस्तकालय में एक बग है। उस पुस्तकालय के रखरखाव करने वालों को बग को अपस्ट्रीम की सूचना दी जानी चाहिए। मदद करने के लिए यहां कुछ भी नहीं है जो हम कर सकते हैं। – Waylan
@Waylan ** उत्तर से पहले ** बक्षीस ** जोड़ा गया था। जवाब पोस्ट करने का एकमात्र कारण था क्योंकि मैंने बक्षीस जोड़ा था। इस तरह बाउंटी काम करते हैं। –